详解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 相关文章推荐
var与Javascript变量隐式声明
Sep 17 Javascript
CSS+jQuery实现的一个放大缩小动画效果
Sep 24 Javascript
checkbox批量选中,获取选中项的值的简单实例
Jun 28 Javascript
javascript循环链表之约瑟夫环的实现方法
Jan 16 Javascript
分分钟玩转Vue.js组件(二)
Mar 01 Javascript
Vue中定义全局变量与常量的各种方式详解
Aug 23 Javascript
解决循环中setTimeout执行顺序的问题
Jun 20 Javascript
vue里input根据value改变背景色的实例
Sep 29 Javascript
微信小程序引入VANT组件的方法步骤
Sep 19 Javascript
vue实现扫码功能
Jan 17 Javascript
JavaScript字符和ASCII实现互相转换
Jun 03 Javascript
JS原型对象操作实例分析
Jun 06 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实现过滤表单提交中html标签的方法
2014/10/17 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
PHP7如何开启Opcode打造强悍性能详解
2018/05/11 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
使用JavaScript获取Request中参数的值方法
2016/09/27 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
mpvue实现左侧导航与右侧内容的联动
2019/10/21 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
python实现图片转字符画的完整代码
2021/02/21 Python
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
纬创Java面试题笔试题
2014/10/02 面试题
单位领导证婚词
2014/01/14 职场文书
八年级生物教学反思
2014/01/22 职场文书
给校长的建议书100字
2014/05/16 职场文书
公积金贷款承诺书
2015/04/30 职场文书
工程进度款催款函
2015/06/24 职场文书
我的中国梦主题班会
2015/08/14 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang