Angular.js学习笔记(五)

来源:互联网 发布:java future get 阻塞 编辑:程序博客网 时间:2024/05/19 03:29

按照约定,我们这篇文章来具体掰扯掰扯angular的作用域scopeAngularJSAngularJSDOMAngularJSDOM1.Angular访rootScope来表示,一般应该放在模块的run()中初始化。
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

0 0
原创粉丝点击