【发布时间】:2015-05-14 14:23:03
【问题描述】:
在Angular JS控制器中,为什么我必须同时注入作用域和根作用域,控制器不能将其作用域作为根作用域的子级,并且默认注入,就像在视图中一样,我总是可以将作用域和根作用域的属性都引用为裸变量.......为什么这也不适用于控制器,甚至也适用于服务?
【问题讨论】:
-
一个原因是它使单元测试既容易又可能。
标签: angularjs model-view-controller
在Angular JS控制器中,为什么我必须同时注入作用域和根作用域,控制器不能将其作用域作为根作用域的子级,并且默认注入,就像在视图中一样,我总是可以将作用域和根作用域的属性都引用为裸变量.......为什么这也不适用于控制器,甚至也适用于服务?
【问题讨论】:
标签: angularjs model-view-controller
是的,您对$rootScope 的看法是正确的。根据 Angular Js 文档
但是注入的原因是,这就是只有 Angular 的工作原理,Angular 的注入器功能会查找所有注入的依赖项并创建对象的引用。也根据文档:
A root scope can be retrieved using the $rootScope key from the $injector.
【讨论】:
其实,更多的用户对为什么两者都用在控制器中感到困惑
$scope 用于控制器和视图之间的通信。 $scope 将视图(DOM 元素)绑定到视图模型
但是rootscope,应用程序中只有一个rootscope,它在应用程序的所有组件之间共享。 $rootscope 一个全局变量。所有其他 $scopes 都是 $rootScope.
举例
有两个控制器都有作用域
var app = angular.module('myApp', []);
app.controller('Ctrl1', function ($scope, $rootScope) {
$scope.msg = 'World';
$rootScope.name = 'AngularJS';
});
app.controller('Ctrl2', function ($scope, $rootScope) {
$scope.msg = 'Dot Net Tricks';
$scope.myName = $rootScope.name;
});
rootscope 仅适用于所有控制器,但范围没有从另一个控制器获取
注意
当您将 ng-model 与 $rootScope 对象一起使用时,AngularJS 会更新 那些在控制器的特定 $scope 下但不在 全局级别 $rootScope。为每个控制器创建一个私有 $scope 将其绑定到视图。
【讨论】:
$rootScope..如果在同一页面上引导了两个应用程序..