AngularJS入门教程之Scope(作用域)
AngularJSScope(作用域)
Scope(作用域)是应用在HTML(视图)和JavaScript(控制器)之间的纽带。
Scope是一个对象,有可用的方法和属性。
Scope可应用在视图和控制器上。
如何使用Scope
当你在AngularJS创建控制器时,你可以将$scope对象当作一个参数传递:
AngularJS实例
控制器中的属性对应了视图上的属性:
<!DOCTYPEhtml> <html> <head> <metacharset="utf-8"> <scriptsrc="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <divng-app="myApp"ng-controller="myCtrl"> {{carname}} </div> <script> varapp=angular.module('myApp',[]); app.controller('myCtrl',function($scope){ $scope.carname="Volvo"; }); </script> <p>控制器中创建一个属性名"carname",对应了视图中使用{{}}中的名称。</p> </body> </html
运行结果:
Volvo
控制器中创建一个属性名"carname",对应了视图中使用{{}}中的名称。
当在控制器中添加$scope对象时,视图(HTML)可以获取了这些属性。
视图中,你不需要添加$scope前缀,只需要添加属性名即可,如:{{carname}}。
Scope概述
AngularJS应用组成如下:
View(视图),即HTML。
Model(模型),当前视图中可用的数据。
Controller(控制器),即JavaScript函数,可以添加或修改属性。
scope是模型。
scope是一个JavaScript对象,带有属性和方法,这些属性和方法可以在视图和控制器中使用。
AngularJS实例
如果你修改了视图,模型和控制器也会相应更新:
<!DOCTYPEhtml> <html> <head> <metacharset="utf-8"> <scriptsrc="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <divng-app="myApp"ng-controller="myCtrl"> <inputng-model="name"> 我的名字是{{name}} </div> <script> varapp=angular.module('myApp',[]); app.controller('myCtrl',function($scope){ $scope.name="JohnDoe"; }); </script> <p>当你修改输入框中的值时,会影响到模型(model),当然也会影响到控制器对应的属性值。</p> </body> </html>
运行结果:
我的名字是JohnDoe
当你修改输入框中的值时,会影响到模型(model),当然也会影响到控制器对应的属性值。
Scope作用范围
了解你当前使用的scope是非常重要的。
在以上两个实例中,只有一个作用域scope,所以处理起来比较简单,但在大型项目中,HTMLDOM中有多个作用域,这时你就需要知道你使用的scope对应的作用域是哪一个。
AngularJS实例
当我们使用ng-repeat指令时,每个重复项都访问了当前的重复对象:
<!DOCTYPEhtml> <html> <head> <metacharset="utf-8"> <scriptsrc="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <divng-app="myApp"ng-controller="myCtrl"> <ul> <ling-repeat="xinnames">{{x}}</li> </ul> </div> <script> varapp=angular.module('myApp',[]); app.controller('myCtrl',function($scope){ $scope.names=["Emil","Tobias","Linus"]; }); </script> </body> </html>
运行结果:
- Emil
- Tobias
- Linus
每个<li>元素可以访问当前的重复对象,这里对应的是一个字符串,并使用变量x表示。
根作用域
所有的应用都有一个$rootScope,它可以作用在ng-app指令包含的所有HTML元素中。
$rootScope可作用于整个应用中。是各个controller中scope的桥梁。用rootscope定义的值,可以在各个controller中使用。
AngularJS实例
创建控制器时,将$rootScope作为参数传递,可在应用中使用:
<!DOCTYPEhtml> <html> <head> <metacharset="utf-8"> <scriptsrc="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <divng-app="myApp"ng-controller="myCtrl"> 姓氏为{{lastname}}家族成员: <ul> <ling-repeat="xinnames">{{x}}{{lastname}}</li> </ul> </div> <script> varapp=angular.module('myApp',[]); app.controller('myCtrl',function($scope,$rootScope){ $scope.names=["Emil","Tobias","Linus"]; $rootScope.lastname="Refsnes"; }); </script> <p>注意$rootScope在循环对象内外都可以访问。</p> </body> </html>
运行结果:
姓氏为Refsnes家族成员:
注意$rootScope在循环对象内外都可以访问。