繁体   English   中英

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

[英]What is the difference between $scope.$root and $rootScope?

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

$rootScope var指向所有范围的父级,可以在任何地方注入。 所有其他范围都是$rootScope子代。 它们是通过$rootScope$new方法创建的,因此每个范围都继承自$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 ,因为它是一种明确的,总体上更常用的引用$rootScope

如前所述, $scope.$root保存对$rootScope的引用。

不幸的是,使用$scope.$root和使用$rootScope之间存在差异:

  1. $scope是root时,它的$root属性为null
  2. $scope.$root仅在隔离范围上分配: https//github.com/angular/angular.js/blob/v1.3.6/src/ng/rootScope.js#L204

所以你可能会遇到$scope.$rootnull 最好用$rootScope代替......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM