我在控制器中看到$ scope有$ root,这是什么?它与$ rootScope的不同之处在于可以在控制器中注入?
如前所述,$scope.$root
持有一个参考$rootScope
.
不幸的是,使用$scope.$root
和使用之间存在差异$rootScope
:
当$scope
IS是根时,它的$root
属性是null
$scope.$root
仅在隔离范围上分配:https:
//github.com/angular/angular.js/blob/v1.3.6/src/ng/rootScope.js#L204
所以,你可能会遇到这样的情况$scope.$root
是null
.更好地使用$rootScope
......
$rootScope
var指向所有范围的父级,可以在任何地方注入.所有其他范围都是儿童的$rootScope
.它们是通过$new
方法创建的,$rootScope
因此每个范围都继承自$rootScope
.
在Scope
构造函数 定义中的角度源中有一行:
function Scope() { this.$id = nextUid(); ... this['this'] = this.$root = this; ...
似乎$root
var只是this
第一个创建范围的占位符- $rootScope
.
接下来在方法中有这段代码$new
:
$new: function(isolate) { ... if (isolate) { child = new Scope(); child.$root = this.$root; ... return child;
所以$root
每个范围子的var $rootScope
都是一个引用$rootScope
.这些孩子的所有孩子都会得到同样的参考$rootScope
在我看来,最好使用$rootScope
via依赖注入,因为它是一种明确的,总体上更常用的引用方式$rootScope