我在控制器中看到$ scope有$ root,这是什么?它与$ rootScope的不同之处在于它可以注入控制器吗?
答案 0 :(得分:69)
$rootScope
var指向所有范围的父级,可以在任何地方注入。所有其他范围都是$rootScope
的子项。它们是通过$new
的{{1}}方法创建的,因此每个范围都继承自$rootScope
。
在$rootScope
构造函数there is a line的定义中的角度源中:
Scope
function Scope() {
this.$id = nextUid();
...
this['this'] = this.$root = this;
...
var似乎只是创建的第一个范围$root
的占位符 - this
。
接下来$rootScope
方法中有this piece of code:
$new
因此 $new: function(isolate) {
...
if (isolate) {
child = new Scope();
child.$root = this.$root;
...
return child;
的每个范围子项的$root
var都是对$rootScope
的引用。这些孩子的所有孩子都会得到与$rootScope
在我看来,最好使用$rootScope
依赖注入,因为它是一种明确且总体更常用的引用$rootScope
答案 1 :(得分:28)
如前所述,$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
而不是......