控制器的作用

没有控制器/controller,我们没有地方定义业务模型

比如:ng-init指令。我们可以使用ng-init指令在scope对象上定义数据

<div ng-init="sb={name:'somebody',gender:'male',age:28}">
</div>

控制器让我们有机会在scope上定义我们的业务逻辑,具体说,可以使用控制器:

•对scope对象进行初始化

•向scope对象添加方法

在模板中声明控制器

在一个HTML元素上使用ng-controller指令,就可以引入一个控制器对象:

<div ng-controller="myController">...</div>

控制器的实现

控制器实际上就是一个JavaScript的类/构造函数:

 //控制器类定义
var myControllerClass = function($scope){
//模型属性定义
$scope.text = "...";
//模型方法定义
$scope.do = function(){...};
};
//在模块中注册控制器
angular.module('someModule',[])
.controller("myController",myControllerClass);

控制器对scope的作用

注意:ng-controller指令总是创建一个新的scope对象:

流程:

•ng-app指令引发$rootScope对象的创建。开始时,它是一个空对象。

•body元素对应的scope对象还是$rootScope。ng-init指令将sb对象挂在了$rootScope上。

•div元素通过ng-controller指令创建了一个新的scope对象,这个对象的原型是$rootScope。

•因为原型继承的关系,在do函数中对sb的引用指向$rootScope.sb。

初始化$scope对象

<html ng-app="test">
<head>
<script src="angular.js"></script>
</head>
<body>
<div ng-controller="testController">
<div>name : {{vm.sb.name}}</div>
<div>gender : {{vm.sb.gender}}</div>
<div>age : {{vm.sb.age}}</div>
<div>career : {{vm.sb.career}}</div>
<div><img ng-src="{{vm.sb.photo}}"></div>
</div>
</body>
</html>
 var testControllerClass = function($scope){
//view model
$scope.vm = {
sb : {
name : "Jason Stantham",
gender : "male",
age : 48,
career : "actor",
photo : "http:1.jpg"
}
};
};
angular.module("ezstuff",[])
.controller("testController",testControllerClass);

向scope对象添加方法

<html ng-app="test">
<head>
<script src="angular.js"></script>
</head>
<body>
<div ng-controller="testController">
<button ng-click="vm.shuffle();">shuffle</button>
<div>name : {{vm.sb.name}}</div>
<div>gender : {{vm.sb.gender}}</div>
<div>age : {{vm.sb.age}}</div>
<div>career : {{vm.sb.career}}</div>
<div><img ng-src="{{vm.sb.photo}}"></div>
</div>
</body>
</html>
 var testControllerClass = function($scope){
//view model
$scope.vm = {
sb : {
name : "Jason Stantham",
gender : "male",
age : 48,
career : "actor",
photo : "1.jpg"
},
shuffle : function(){
var repo = [
{name:"Jason Stantham",gender:"male",age:48,career:"actor",photo:"2.jpg"},
{name:"Jessica Alba",gender:"female",age:32,career:"actress",photo:"4.jpg"},
{name:"Nicolas Cage",gender:"male",age:53,career:"actor",photo:"4.jpg"},
{name:"崔永元",gender:"male",age:48,career:"independent journalist",photo:"5.jpg"}];
var idx = Math.floor(Math.random()*repo.length);
$scope.vm.sb = repo[idx];
}
};
};
angular.module("test",[])
.controller("testController",testControllerClass );

控制器不要以下操作

•DOM操作:应当将DOM操作使用指令/directive进行封装。

•变换输出形式:应当使用过滤器/filter对输出显示进行转化。

•跨控制器共享代码:对于需要复用的基础代码,应当使用服务/service进行封装

(七)Angularjs - 控制器的更多相关文章

  1. AngularJS控制器

    AngularJS 控制器 控制 AngularJS 应用程序的数据,控制器是常规的 JavaScript 对象. 1. angular.module(name, [requires], [confi ...

  2. AngularJS 控制器

    AngularJS 控制器 控制 AngularJS 应用程序的数据. AngularJS 控制器是常规的 JavaScript 对象. AngularJS 控制器 AngularJS 应用程序被控制 ...

  3. Unity手游之路<七>角色控制器

    Unity手游之路<七>角色控制器 我们要控制角色的移动,可以全部细节都由自己来实现.控制角色模型的移动,同时移动摄影机,改变视角.当然Unity也提供了一些组件,可以让我们做更少的工作, ...

  4. AngularJS 控制器 ng-controller

    AngularJS 控制器 控制 AngularJS 应用程序的数据. AngularJS 控制器是常规的 JavaScript 对象. AngularJS 应用程序被控制器控制. ng-contro ...

  5. angularjs控制器之间通信,事件通知服务

    service要记住一点就是所有的services都是singleton(单例)的,service更多的是做一些业务逻辑,数据交互.当然,利用单例这特点也可以用来做不同控制器间的通信.控制器间的通信也 ...

  6. AngularJS学习之旅—AngularJS 控制器(六)

    1.AngularJS 控制器 AngularJS 应用程序被控制器控制. ng-controller 指令定义了应用程序控制器. 控制器是 JavaScript 对象,由标准的 JavaScript ...

  7. AngularJS 1.x系列:AngularJS控制器(3)

    1. 控制器(Controller)定义 控制器(Controller)在AngularJS中作用是增强视图(View),AngularJS控制器是一个构造方法,用来向视图(View)中添加额外功能. ...

  8. AngularJS控制器和AngularJS过滤器的学习(3)

    前面简单的学习了AngularJS的表达式和指令,就可以说大概对AngularJS有了一定的了解吧,嘿嘿,下面就来总结学习一下AngularJS的控制器和过滤器哦. 说起来AngularJS控制器,其 ...

  9. AngularJS 控制器的方法

    AngularJS 控制器也有方法(变量和函数) <!DOCTYPE html><html><head><meta http-equiv="Cont ...

  10. 【06】AngularJS 控制器

    AngularJS 控制器 AngularJS 控制器 控制 AngularJS 应用程序的数据. AngularJS 控制器是常规的 JavaScript 对象. AngularJS 控制器 Ang ...

随机推荐

  1. 你不知道的JavaScript(作用域和闭包)

    作用域和闭包 ・作用域 引擎:从头到尾负责整个JavaScript的编译及执行过程. 编译器:负责语法分析及代码生成等. 作用域:负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非 ...

  2. Java 保留两位小数

    在实际项目开发中,经常会存在浮点数四舍五入保留几位小数的问题,故收集了几种常用方法: 直接上代码(保留两位小数). Format.java: import java.math.BigDecimal; ...

  3. 用extern关键字使程序更加清晰

    一.基础研究 之前基于tcc.tlink实现一个新的编译连接工具cc.exe,用到的文件有cs.lib.c0s.obj.main.obj,其中main.obj是我们自己加入的文件,它可以实现开始显示彩 ...

  4. cf C. Hamburgers

    http://codeforces.com/contest/371/problem/C 二分枚举最大汉堡包数量就可以. #include <cstdio> #include <cst ...

  5. Ftp的断点下载实现

    思路:首先获取本地临时文件的大小,在通过FTp的REST命令获取远程文件的偏移,然后再RETR命令在偏移处下载.while循环对比本地文件和远程文件的字节大小,如此 不断的反复以上过程,直到远程文件字 ...

  6. 【转】Android Activity和Intent机制学习笔记----不错

    原文网址:http://www.cnblogs.com/feisky/archive/2010/01/16/1649081.html Activity Android中,Activity是所有程序的根 ...

  7. Ubuntu14.04 安装QQ国际版wine-qqintl

    Ubuntu14.04安装qq国际版方式: 首先下载,链接为:  https://pan.baidu.com/s/1boPitVD 密码:jp1j 也可去Ubuntu中文的Kylin(优麒麟)官网下载 ...

  8. yui datatable动态修改行号

    相关函数 getRecord  :YAHOO.widget.Record getRecord ( row ) For the given identifier, returns the associa ...

  9. 【用PS3手柄在安卓设备上玩游戏系列】连接手柄和设备

    背景 硬件要求1:PS3 手柄 + 手柄配套的USB线 硬件要求2:已经获得 ROOT 权限并且支持蓝牙的安卓设备 软件要求1:Sixaxis Compatibility Checker PS3 手柄 ...

  10. Java学习日记-7 抽象类和接口

    一.抽象类 abstract修饰:类和类中的方法 抽象方法:abstract type name(parameter-list);(abstract不能修饰static方法和构造函数) 引用:抽象类有 ...