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在循环对象内外都可以访问。