16

AngularJS アプリケーションの最上位要素 (ドキュメント) のスコープを返す共有関数があります。

function topScope() { 
  return angular.element(document).scope();
}

これは常に機能し、アプリケーション内にあるすべてのサブスコープにアクセスできることが常に保証されます (コントローラーまたはディレクティブ内にあるかどうか)。

これは私がそれを何に使うかの例です:

topScope().$emit('pageReady');

$rootScope も同じように機能することに気付きました。

$rootScope.$emit('pageReady');

これも機能し、同じ効果を達成します。しかし、$rootScope は「既製の $scope」スコープ (作成されたスコープはそのメソッドとプロパティを継承する) になるように設計されているため、これは実際にはページの最上位のスコープであることを意味しますか? したがって、ドキュメント ノードにアタッチされたスコープ オブジェクトの親ですか?

4

1 に答える 1

24

$rootScope特定の AngularJS アプリケーション内のすべてのスコープの親スコープです。1 つのページで複数の AngularJS アプリケーションをブートストラップできるため (手動のみで、これは を使用して行うことはできません) 、1 つの HTML ドキュメントにng-app複数のインスタンスを含めることもできます。$rootScope

ここで説明されているように、それぞれ$rootScopeが ngApp が宣言された要素または angular.bootstrap に渡された要素のいずれかに「添付」さます。

つまり、これ$rootScopeは 1 つの AngularJS アプリケーションのすべてのスコープのルートですが、特定の HTML ドキュメントの他のすべてのスコープの親スコープとして機能する「スーパールート」スコープはありません。

あなたの場合、$rootScopeHTML ドキュメント全体で AngularJS アプリケーションが 1 つしかない場合は、 を使用しても問題ないかもしれません。

于 2012-11-30T18:23:57.977 に答える