![](/img/trans.png)
[英]What is difference between $scope.$emit and $rootScope.$emit?
[英]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
之間存在差異:
$scope
是root時,它的$root
屬性為null
$scope.$root
僅在隔離范圍上分配: https : //github.com/angular/angular.js/blob/v1.3.6/src/ng/rootScope.js#L204 所以你可能會遇到$scope.$root
為null
。 最好用$rootScope
代替......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.