详解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使用指南之string.js
Jan 10 Javascript
javascript循环变量注册dom事件 之强大的闭包
Sep 08 Javascript
使用JQuery在线制作ppt并在线演示源码特效
Sep 08 Javascript
jQuery实现checkbox列表的全选、反选功能
Nov 24 Javascript
有趣的bootstrap走动进度条
Dec 01 Javascript
Vue.js框架路由使用方法实例详解
Aug 25 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
Sep 22 jQuery
微信小程序promsie.all和promise顺序执行
Oct 27 Javascript
vue动画效果实现方法示例
Mar 18 Javascript
vue实现购物车的监听
Apr 20 Javascript
js实现表格数据搜索
Aug 09 Javascript
js 将多个对象合并成一个对象 assign方法的实现
Sep 24 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
使用PHP数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
PHP 程序员应该使用的10个组件
2009/10/31 PHP
php通过COM类调用组件的实现代码
2012/01/11 PHP
php缓存技术详细总结
2013/08/07 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
2015/03/27 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
Jquery EasyUI $.Parser
2017/06/02 jQuery
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
Python里disconnect UDP套接字的方法
2015/04/23 Python
python如何为创建大量实例节省内存
2018/03/20 Python
Python文件路径名的操作方法
2019/10/30 Python
python多进程并发demo实例解析
2019/12/13 Python
Python实现中英文全文搜索的示例
2020/12/04 Python
java程序员面试交流
2012/11/29 面试题
优秀村官事迹材料
2014/01/10 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
收入证明范本
2015/06/12 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python