37

この$apply関数は、 を含む任意のスコープで実行できます$rootScope

ローカル スコープで実行した場合、または で実行した場合に違いが生じる場合はあります$rootScopeか?

で特定の関数をラップするヘルパー関数を作成したいので、私は尋ねています$apply。これを行うには、常にスコープを渡す必要があります。これは、A) 煩わしく、B) 必ずしもローカル スコープを持っているとは限らないため、簡単ではありません。

で常にヘルパー関数を呼び出したい$apply$rootScopeですが、それを行うことにリスクがある場合はそうではありません。

4

4 に答える 4

48

任意のスコープで実行$applyすると、常に$rootscope.$digest. 違いが生じる唯一のケースは、 への引数として式を提供する場合です$apply。式は現在のスコープ (対 $rootScope) で評価されますが、その後$rootscope.$digest常に呼び出されます。

ソースコードは非常に明確です: rootScope.js

結論: 引数なしで呼び出し$applyても、違いはありません。

于 2013-11-29T10:56:27.703 に答える
15

通常ではなく で実行$applyするもう 1 つの理由は、さまざまなコントローラー、つまりさまざまなスコープで使用されるサービスを呼び出す必要がある場合です。 この場合、私は をサービスに注入し、そのサービスが将来どのスコープで使用されるかを気にせずに $apply を呼び出すことを好みます。$rootScope$scope$apply
$rootScope

于 2014-07-31T08:16:23.570 に答える