我在控制器中看到$ scope有$ root,这是什么?与可以注入控制器的$ rootScope有何不同?
$rootScopevar指向所有作用域的父级,可以在任何地方注入。所有其他范围是的子级$rootScope。它们是通过的$new方法创建的,$rootScope因此每个范围都继承自$rootScope。
$rootScope
$new
在Scope构造函数 的定义中的角度源中有一行:
Scope
function Scope() { this.$id = nextUid(); ... this['this'] = this.$root = this; ...
似乎$rootvar只是this创建的第一个作用域- 的占位符$rootScope。
$root
this
接下来是这段代码在$new方法:
$new: function(isolate) { ... if (isolate) { child = new Scope(); child.$root = this.$root; ... return child;
因此$root,每个作用域子对象的var $rootScope都是对的引用$rootScope。这些孩子中的所有孩子都会得到相同的参考$rootScope
我认为最好使用$rootScopevia依赖项注入,因为它是一种显式且总体上更常用的引用$rootScope