大きなスコープを持つ可能性のある大規模なアプリケーションで、$scope.$apply
立て続けに複数回呼び出すと、「スコープが既に進行中です」というエラーが発生する可能性がありますか?
たとえば、ブートストラップ スイッチプラグインにリンクされているディレクティブがあります。このディレクティブは、ユーザーがクリックしてブール値を true/false に切り替えることができるオン/オフ スイッチを表示するだけです。ユーザーがこのボタンをクリックするたびに、私のディレクティブは、$scope.$apply()
1 つのスコープ変数がスイッチの新しい状態 (オンまたはオフ) を反映するように変更されます。
ユーザーがスイッチを立て続けにクリックすると、「ダイジェストが既に進行中です」というエラーが表示されるのではないかと心配していました。ただし、そうではありません。物事が非常にスムーズに進むたびに、複数の$scope.$apply()
呼び出しが発生したにもかかわらず、スコープの値がどこでも即座に更新されます。
これは、$scope.$apply
何らかの方法で最適化されているため、完全なダイジェストを実行せず、変更された値のみを更新するためですか、それとも現時点でスコープが比較的小さいため、完全なダイジェストの実行に時間がかからないためですか?