簡體   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