$rootScope と $rootScope.$root に違いはありますか?
違いは何ですか
$rootScope.global.flag = true および $rootScope.$root.global.flag = true
両方とも rootscope で同じ変数にアクセスしますか?
もしそうなら、それらのいずれかを使用しなければならない特定の状況はありますか?
$rootScope と $rootScope.$root に違いはありますか?
違いは何ですか
$rootScope.global.flag = true および $rootScope.$root.global.flag = true
両方とも rootscope で同じ変数にアクセスしますか?
もしそうなら、それらのいずれかを使用しなければならない特定の状況はありますか?
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 になります (親がないため)。