Angular.js学习笔记(五)

本文深入解析AngularJS中的作用域概念,包括根作用域、作用域与控制器、作用域与模板的关系,以及作用域的生命周期。通过示例演示如何在作用域层次中进行数据传递和生命周期操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按照约定,我们这篇文章来具体掰扯掰扯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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值