Angular.js学习笔记(五)
来源:互联网 发布:java future get 阻塞 编辑:程序博客网 时间:2024/05/19 03:29
按照约定,我们这篇文章来具体掰扯掰扯angular的作用域
Demo:
angular.module('myApp', []).run(function ($rootScope){ $rootScope.rootValue = 5;})
2.作用域和控制器
控制器是通过增强作用域来提供业务逻辑的代码。这是我们在作用域这个角度为它下的一个定义。注册的控制器在ng-controller指令连接到AngularJS模板时被实例化的。每个控制器都会有一个自己的单独的子作用域,至于在自定义指令中的$scope,是与控制器作用域同级的,和控制器作用域并没有任何的隶属关系。
3.作用域和模板
模板是用来为Angular提供视图的。在模板中定义AngularJS指令时,可以使用作用域属性和函数。在模板的表达式中也可以引用作用域中的属性。
4.作用域生命周期
创建->监视器注册->模型变化->变化观察->作用域销毁
创建阶段发生在作用域初始化时。启动应用时将创建一个根作用域,当遇到ng-controller或者ng-repeat指令时,控制器或者指令链接到模板时,将会创建子作用域。在创建阶段,将会创建一个digest循环,用于与浏览器时间循环交互。该digest循环负责使用模型的变化更新DOM元素,并执行所有已经注册的监视器函数。如果需要手动的执行digest循环,可以通过执行$digest()方法实现. 例如,下面的代码将执行所有的异步改动,然后执行作用域中的监视函数。
$scope.$digest()
我们可以用$watch()方法在作用域上注册自己的监视函数。该方法接受两个参数,一个是作用域属性的名字,一个是回调函数。
$scope.$watch('name', function(newValue, oldValue){});
3.作用域层次问题
这里有一个来自《Angular Js开发秘籍》的Demo,简单明了。
scopeDemo.js
angular.module('myApp',[]).controller('LevelA', function($scope){ $scope.title = "LevelA"; $scope.valueA = 1; $scope.inc = function(){ $scope.valueA++; };}).controller('LevelB', function($scope){ $scope.title = "LevelB"; $scope.valueB = 1; $scope.inc = function(){ $scope.valueB++; };}).controller('LevelC', function($scope){ $scope.title = "LevelC"; $scope.valueC = 1; $scope.inc = function(){ $scope.valueC++; };});
<!doctype html><html ng-app="myApp"><head><title>AngularJS Scope</title></head><body><div ng-controller="LevelA"><h3>{{h3}}</h3>ValueA = {{valueA}}<input type="button" ng-click="inc()" value="+" /><div ng-controller="levelB"><hr><h3>{{title}}</h3>ValueA = {{valueA}}<br>ValueB = {{valueB}}<br><input type="button" ng-click="inc()" value="+" /><div ng-controller="LevelC"><hr><h3>{{title}}</h3>ValueA = {{valueA}}<br>ValueB = {{valueB}}<br>ValueC = {{valueC}}<input type="button" ng-click="inc()" value="+" /></div></div></div><script src="angular.js"></script><script src="scopeDemo.js"></script></body></html>
子作用域可以访问父作用域的属性值,父作用域的属性值发生变化时,子作用域中的属性值也会跟着发生变化,而子作用域中的属性值保持独立性。
按照惯例,我们把一些资料列在这里,供大家学习。
http://www.angularjs.cn/A09C
https://github.com/angular/angular.js/wiki/Understanding-Scopes
http://www.cnblogs.com/lcllao/archive/2012/09/23/2698651.html
- Angular.js学习笔记(五)
- Angular JS 学习笔记五
- Angular.js(五)
- Angular.js学习笔记
- angular js学习笔记
- Angular.js 学习笔记
- angular.js学习笔记
- Angular JS 学习笔记
- angular.js学习笔记(一)
- Angular.js学习笔记(三)
- Angular.js学习笔记(四)
- angular Js 学习笔记(一)
- Angular.js学习笔记(一)
- Angular.js学习笔记(二)
- Angular JS 学习笔记3
- Angular JS 学习笔记四
- angular.js学习笔记(一)
- angular.js学习笔记(二)
- android 自定义checkbox怪异事件(未完)
- android SDK和ADT的区别
- 诗情画意,激昂我人生
- Android技术积累:开发规范
- UVALive 6838 (线段树)
- Angular.js学习笔记(五)
- java中split的坑,用的时候一定要小心
- 启动页广告
- 功能这么齐全的图片压缩类
- Swift中使用do-catch语句进行异常处理
- heat template: get_param to get value from JSON param.
- LeetCode(173) Binary Search Tree Iterator
- 对话框
- linux网络编程实现投票功能