在Angular JS控制器中,为什么我必须同时注入作用域和根作用域,控制器的作用域不能作为rootcope的子作用,并且默认注入,如在视图中,我总是可以将范围和根范围的属性引用为裸变量.......为什么这不适用于控制器,甚至也应用于服务?
答案 0 :(得分:1)
是的,您的想法是正确的$rootScope
。根据Angular Js文档
但是注入的原因是,这就是Angular如何工作,Angular的注入器功能查找所有注入的依赖项并创建对象的引用。根据文件也:
A root scope can be retrieved using the $rootScope key from the $injector.
答案 1 :(得分:1)
实际上,更多用户混淆了为什么两者都在控制器中使用
$scope
用于控制器和视图之间的通信。 $ scope将视图(DOM元素)绑定到viewmodel
但是从根本上看,应用程序中只有一个rootcope,它在应用程序的所有组件之间共享。 $rootscope
一个全局变量。所有其他$范围都是$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只能用于所有控制器,但范围不是来自另一个控制器
注意强>
当您使用带有$ rootScope对象的ng-model时,AngularJS会更新 那些对象在控制器的特定$范围内但不在 全局级别$ rootScope。为每个控制器创建一个私有$ scope 将它绑定到视图。