详解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 相关文章推荐
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
Mar 24 Javascript
鼠标滚轴控制文本框值的JS代码
Nov 19 Javascript
Jquery 动态生成表格示例代码
Dec 24 Javascript
JavaScript访问CSS属性的几种方式介绍
Jul 21 Javascript
深入分析JQuery和JavaScript的异同
Oct 23 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
Feb 23 Javascript
JavaScript计算两个日期时间段内日期的方法
Mar 16 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
Mar 16 Javascript
jQuery用FormData实现文件上传的方法
Nov 21 Javascript
JavaScript中日常收集常见的10种错误(推荐)
Jan 08 Javascript
angularjs中的$eval方法详解
Apr 24 Javascript
详解node HTTP请求客户端 - Request
May 05 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数组相关函数汇总
2015/03/24 PHP
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
对于Python中线程问题的简单讲解
2015/04/03 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
基于python实现操作redis及消息队列
2020/08/27 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
2020/12/24 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
Tomcat的缺省是多少,怎么修改
2014/04/09 面试题
优秀应届毕业生自荐信
2013/11/16 职场文书
环境工程专业自荐信
2014/03/03 职场文书
售房协议书范本2014
2014/10/23 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
Python面向对象之成员相关知识总结
2021/06/24 Python