AngularJS 作用域 ( Scope )
AngularJS Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带
Scope 是一个对象,有可用的方法和属性
如何使用 Scope
当我们使用 AngularJS 创建控制器时,可以将 $scope 对象当作一个参数传递
控制器中的属性对应了视图上的属性
当在控制器中添加 $scope 对象时,视图 (HTML) 可以获取了这些属性
在视图中,不需要添加 $scope 前缀, 只需要添加属性名即可,如: {{site}}
<div ng-app="myApp" ng-controller="myCtrl"> <h1>{{site}}</h1> </div> <footer>简单教程,简单编程<br/>Copyright © 简单教程 www.twle.cn</footer> <script> var app = angular.module('myApp', []); app.controller('myCtrl',function($scope) {$scope.site ="简单教程";}); </script>
Scope 概述
AngularJS 应用组成如下
- View (视图), 即 HTML
- Model (模型), 当前视图中可用的数据
- Controller (控制器), 即 JavaScript 函数,可以添加或修改属性
scope 是模型
scope 是一个 JavaScript 对象,带有属性和方法,这些属性和方法可以在视图和控制器中使用
下面的范例一旦修改了视图,模型和控制器也会相应更新
<div ng-app="myApp" ng-controller="myCtrl"> <input ng-model="name"> <h1>{{greeting}}</h1> <button ng-click='sayHello()'>点我</button> </div> <footer>简单教程,简单编程<br/>Copyright © 简单教程 www.twle.cn</footer> <script> var app=angular.module('myApp',[]); app.controller('myCtrl',function($scope){ $scope.name="简单教程"; $scope.sayHello = function(){ $scope.greeting='欢迎你,'+ $scope.name+'!'; }; }); </script>
Scope 作用范围
你需要非常关心你使用的每一个 scope
上面的两个范例中, 只有一个作用域 scope,所以处理起来比较简单
但在大型项目中, HTML DOM 中有多个作用域,这时我们就需要知道使用的 scope 对应的作用域是哪一个
范例
当我们使用 ng-repeat 指令时,每个重复项都访问了当前的重复对象
<div ng-app="myApp" ng-controller="myCtrl"> <ul> <li ng-repeat="x in names">{{x}}</li> </ul> </div> <footer>简单教程,简单编程<br/>Copyright © 简单教程 www.twle.cn</footer> <script> var app = angular.module('myApp', []); app.controller('myCtrl',function($scope) { $scope.names = ["腾讯","阿里","京东"]; }); </script>
每个 <li> 元素可以访问当前的重复对象,这里对应的是一个字符串, 并使用变量 x 表示
根作用域
所有的应用都有一个 $rootScope
它可以作用在 ng-app 指令包含的所有 HTML 元素中
$rootScope 可作用于整个应用中,是各个 controller 中 scope 的桥梁
用 rootscope 定义的值,可以在各个 controller 中使用
范例
创建控制器时,将 $rootScope 作为参数传递,可在应用中使用
<div ng-app="myApp" ng-controller="myCtrl"> <h1>{{family}} 家族成员:</h1> <ul> <li ng-repeat="x in names">{{x}} {{lastname}}</li> </ul> </div> <footer>简单教程,简单编程<br/>Copyright © 简单教程 www.twle.cn</footer> <script> var app = angular.module('myApp', []); app.controller('myCtrl',function($scope, $rootScope){ $scope.names = ["腾讯","阿里","京东"]; $rootScope.family = "TAJ"; }); </script>