6

$rootScope と $rootScope.$root に違いはありますか?

違いは何ですか

$rootScope.global.flag = true および $rootScope.$root.global.flag = true

両方とも rootscope で同じ変数にアクセスしますか?

もしそうなら、それらのいずれかを使用しなければならない特定の状況はありますか?

4

1 に答える 1

3

Angular のすべてのスコープは、同じプロトタイプのインスタンスです。そのため、グローバル サービスは、ディレクティブ用に作成され、またはコントローラ用$rootScopeとしてリンク関数に渡されるのと同じタイプのオブジェクトです。$scope

プロパティ$rootはそのプロトタイプの一部であり、すべてのスコープで使用できます。

これ$rootScopeは、Angular によって作成された最初のスコープです。すべてのスコープは$new、既存のスコープのメソッドを使用して作成されます。モジュールで実行される前に作成されるため、これ$rootScopeは特殊なケースです。angular.run()

の値を確認すると$scope.$root、 のルート スコープ サービスによって提供される同じインスタンスが参照されます$rootScope

したがって;

console.log($rootScope === $scope.$root); // will print true

またはあなたの例のように;

console.log($rootScope === $rootScope.$root); // will also print true

そうです、ルートスコープをどのように参照しても、ルートスコープの変数は同じです。

console.log($rootScope.global.flag); // prints true
console.log($scope.$root.global.flag); // prints true
console.log($rootScope.$root.global.flag); // prints true

このように、テンプレート式でルート スコープに明示的にアクセスすることもできます。

<div>{{$root.someValue}}</div>

$parentスコープのチェーンをたどることができるような他のプロパティがあり$parentますが、分離されたスコープの場合は null になります (親がないため)。

于 2015-10-22T14:02:37.720 に答える