详解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 相关文章推荐
跟着Jquery API学Jquery之一 选择器
Apr 07 Javascript
通过javascript把图片转化为字符画
Oct 24 Javascript
js实现仿qq消息的弹出窗效果
Jan 06 Javascript
JS中数组重排序方法
Nov 11 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
Jan 09 Javascript
vue全局组件与局部组件使用方法详解
Mar 29 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
Jul 05 jQuery
个人小程序接入支付解决方案
May 23 Javascript
vue路由传参的基本实现方式小结【三种方式】
Feb 05 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
Oct 29 Javascript
React服务端渲染原理解析与实践
Mar 04 Javascript
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
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调用三种数据库的方法(2)
2006/10/09 PHP
用PHP制作静态网站的模板框架(四)
2006/10/09 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
PHP进程通信基础之信号
2017/02/19 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
js点击选择文本的方法
2015/02/09 Javascript
javascript中Function类型详解
2015/04/28 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
JS实现自动切换文字的导航效果代码
2015/08/27 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
如何安装控制器JavaScript生成插件详解
2018/10/21 Javascript
vue项目里面引用svg文件并给svg里面的元素赋值
2020/08/17 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
python编程开发之类型转换convert实例分析
2015/11/13 Python
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
用Python读取几十万行文本数据
2018/12/24 Python
python如何实现代码检查
2019/06/28 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
美国最大和最受信任的二手轮胎商店:Bestusedtires.com
2020/06/02 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
医护人员英文求职信范文
2013/11/26 职场文书
体育教师自荐信范文
2013/12/16 职场文书
药店主任岗位责任制
2014/02/10 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
年终总结会议主持词
2014/03/17 职场文书
租车协议书范本
2014/04/22 职场文书
高中生操行评语
2014/04/25 职场文书
工程承包协议书
2014/10/20 职场文书
大学毕业生自我评价
2015/03/02 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书