详解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 相关文章推荐
JS getMonth()日期函数的值域是0-11
Feb 15 Javascript
jQuery学习笔记 更改jQuery对象
Sep 19 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
Jan 14 Javascript
toggle()隐藏问题的解决方法
Feb 17 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
Mar 16 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
Apr 17 Javascript
JS代码实现根据时间变换页面背景效果
Jun 16 Javascript
Node.js学习之地址解析模块URL的使用详解
Sep 28 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
Oct 18 Javascript
vue 实现cli3.0中使用proxy进行代理转发
Oct 30 Javascript
JavaScript实现英语单词题库
Dec 24 Javascript
js实现无缝轮播图插件封装
Jul 31 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和ACCESS写聊天室(二)
2006/10/09 PHP
PHP 的几个配置文件函数
2006/12/21 PHP
php+highchats生成动态统计图
2014/05/21 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
php提交post数组参数实例分析
2015/12/17 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
PHP+Redis开发的书签案例实战详解
2019/07/09 PHP
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
JavaScript实现的XML与JSON互转功能详解
2017/02/16 Javascript
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
自己使用总结Python程序代码片段
2015/06/02 Python
Python selenium如何设置等待时间
2016/09/15 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
python内置数据类型之列表操作
2018/11/12 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
EJB面试题
2015/07/28 面试题
材料专业大学毕业生自荐书
2014/07/02 职场文书
销售团队获奖感言
2014/08/14 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
个人年终总结怎么写
2015/03/09 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
MySQL Router的安装部署
2021/04/24 MySQL
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android
Python实现制作销售数据可视化看板详解
2021/11/27 Python