详解AngularJS控制器的使用


Posted in Javascript onMarch 09, 2016

控制器在Angularjs中的作用是增强视图,它实际就是一个函数,用来向视图中的作用域添加额外的功能,我们用它来给作用域对象设置初始状态,并添加自定义行为。

当我们在页面上创建一个控制器时,Angularjs会生成并传递一个$scope给这个控制器,由于Angularjs会自动实例化控制器,所以我们只需要写构造函数即可。下面的例子展示了控制器初始化:

function my Controller($scope){
 $scope.msg="hello,world!"; 
}

上面这个创建控制器的方法会污染全局命名空间,更合理的办法是创建一个模块,然后在模块中创建控制器,如下:

var myApp=angular.module("myApp",[]);
myApp.controller("myController",function($scope){
 $scope.msg="hello,world!";
})

用内置指令ng-click可以将按钮、链接等其他任何DOM元素同点击事件进行绑定。ng-click指令将浏览器中的mouseup事件,同设置在DOM元素上的事件处理程序绑定在一起(例如,当浏览器在某个DOM元素上触发了点击事件,函数就会被调用)。和前面的例子类似,绑定看起来是这样的:

<div ng-controller="FirstController">
<h4>The simplest adding machine ever</h4>
<button ng-click="add(1)" class="button">Add</button>
<a ng-click="subtract(1)" class="button alert">Subtract</a>
<h4>Current count: {{ counter }}</h4>
</div>

按钮和链接都被绑定在了内部$scope的一个操作上,当点击任何一个元素时AngularJS都会调用相应的方法。注意,当设置调用哪个函数时,会同时用括号传递一个参数(add(1))

app.controller('FirstController', function($scope) {
$scope.counter = 0;
$scope.add = function(amount) { $scope.counter += amount; };
$scope.subtract = function(amount) { $scope.counter -= amount; };
});

Angularjs与其他框架的最大区别在于,控制器并不适合来执行DOM操作、格式化或数据操作,以及除存储数据模型之外的状态维护操作,它只是视图和$scope之间的桥梁。

控制器嵌套(作用域包含作用域)

AngularJS应用的任何一个部分,无论它渲染在哪个上下文中,都有父级作用域存在。对于ng-app所处的层级来讲,它的父级作用域就是$rootScope。

默认情况下,AngularJS在当前作用域中无法找到某个属性时,便会在父级作用域中进行查找。如果AngularJS找不到对应的属性,会顺着父级作用域一直向上寻找,直到抵达$rootScope为止。如果在$rootScope中也找不到,程序会继续运行,但视图无法更新。

通过例子来看一下这个行为。创建一个ParentController,其中包含一个user对象,再创建一个ChildController来引用这个对象:

app.controller('ParentController', function($scope) {
$scope.person = {greeted: false};
});
app.controller('ChildController', function($scope) {
$scope.sayHello = function() {
$scope.person.name = 'Ari Lerner';
};
});

如果我们将ChildController置于ParentController内部,那ChildController的$scope对象的父级作用域就是ParentController的$scope对象。根据原型继承的机制,我们可以在子作用域中访问ParentController的$scope对象。

<div ng-controller="ParentController">
<div ng-controller="ChildController">
<a ng-click="sayHello()">Say hello</a>
</div>
{{ person }}
</div>

以上就是本文的全部内容,希望对大家的学习有所帮助,帮助大家熟悉AngularJS控制器。

Javascript 相关文章推荐
prototype与jquery下Ajax实现的差别
Sep 13 Javascript
了解jQuery技巧来提高你的代码
Jan 08 Javascript
JavaScript 语言基础知识点总结(思维导图)
Nov 10 Javascript
实现无刷新联动例子汇总
May 20 Javascript
详解Node.js:events事件模块
Nov 24 Javascript
javascript输出AscII码扩展集中的字符方法
Dec 26 Javascript
JS正则表达式修饰符global(/g)用法分析
Dec 27 Javascript
react高阶组件经典应用之权限控制详解
Sep 07 Javascript
bootstrap中selectpicker下拉框使用方法实例
Mar 22 Javascript
小程序调用微信支付的方法
Sep 26 Javascript
Vue3为什么这么快
Sep 23 Javascript
原生Javascript+HTML5一步步实现拖拽排序
Jun 12 Javascript
JQuery Mobile实现导航栏和页脚
Mar 09 #Javascript
javascript基本算法汇总
Mar 09 #Javascript
javascript时间排序算法实现活动秒杀倒计时效果
Jan 28 #Javascript
javascript获取wx.config内部字段解决微信分享
Mar 09 #Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
Mar 09 #Javascript
jquery实现文本框textarea自适应高度
Mar 09 #Javascript
分享12个实用的jQuery代码片段
Mar 09 #Javascript
You might like
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
PHP 开源AJAX框架14种
2009/08/24 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
jQuery对象与DOM对象转换方法详解
2016/05/10 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
微信小程序中多个页面传参通信的学习与实践
2017/05/05 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
python 实现归并排序算法
2012/06/05 Python
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
通用C#笔试题附答案
2016/11/26 面试题
学校地质灾害防治方案
2014/06/10 职场文书
会议通知
2015/04/15 职场文书
负责培养人意见
2015/06/05 职场文书
学生会招新宣传语
2015/07/13 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
电力培训学习心得体会
2016/01/11 职场文书
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript