$ scope。$ root和$ rootScope有什么区别?

时间:2014-03-06 06:10:15

标签: javascript angularjs angularjs-scope

我在控制器中看到$ scope有$ root,这是什么?它与$ rootScope的不同之处在于它可以注入控制器吗?

2 个答案:

答案 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

之间存在差异
  1. $scope是根时,其$root属性为null
  2. $scope.$root仅在隔离范围上分配: https://github.com/angular/angular.js/blob/v1.3.6/src/ng/rootScope.js#L204
  3. 因此,您可能会遇到$scope.$rootnull的情况。 更好地使用$rootScope而不是......