$ scope。$ root和$ rootScope有什么区别?
我在控制器中看到$ scope有$ root,这是什么? 它和$ rootScope有什么不同,它可以注入到控制器中?
$rootScope
var指向所有范围的父级,并且可以注入到处。 所有其他作用域都是$rootScope
。 它们是通过$rootScope
的$new
方法创build的,因此每个作用域都从$rootScope
inheritance。
在Scope
构造函数定义的angular源中有一行 :
function Scope() { this.$id = nextUid(); ... this['this'] = this.$root = this; ...
看起来$root
var只是创build第一个作用域的占位符 – $rootScope
。
接下来是$new
方法中的这段代码 :
$new: function(isolate) { ... if (isolate) { child = new Scope(); child.$root = this.$root; ... return child;
所以$rootScope
的每个作用域子$rootScope
的$root
var是对$rootScope
的引用。 而这些孩子的所有孩子都会得到相同的参考$rootScope
在我看来,最好是通过dependency injection来使用$rootScope
,因为它是一种显式的和整体上更常用的方法来引用$rootScope
如前所述, $scope.$root
持有对$rootScope
的引用。
不幸的是,使用$scope.$root
和使用$rootScope
是有区别的:
- 当
$scope
是根时,它的$root
属性是null
-
$scope.$root
只在隔离范围上分配: https : //github.com/angular/angular.js/blob/v1.3.6/src/ng/rootScope.js#L204
所以你可能会遇到$scope.$root
为null
。 更好地使用$rootScope
来代替…