$scope.$apply
コードで使用する必要がある場合と、「ダイジェストがすでに進行中」のエラーがスローされる場合があります。だから私はこれを回避する方法を見つけ始め、この質問を見つけました:AngularJS:$ scope。$ apply()を呼び出すときにすでに進行中のエラー$ digestを防ぎます。ただし、コメント(およびAngular Wiki)では、以下を読むことができます。
(!$ scope。$$ phase)$ scope。$ apply()の場合は行わないでください。これは、$ scope。$ apply()がコールスタックで十分に高くないことを意味します。
だから今私は2つの質問があります:
- なぜこれがアンチパターンなのですか?
- $ scope。$ applyを安全に使用するにはどうすればよいですか?
「ダイジェストはすでに進行中」エラーを防ぐための別の「解決策」は$ timeoutを使用しているようです:
$timeout(function() {
//...
});
それは行く方法ですか?安全ですか?だからここに本当の質問があります:「すでに進行中のダイジェスト」エラーの可能性を完全に排除するにはどうすればよいですか?
PS:同期していない非Angularjsコールバックでのみ$ scope。$ applyを使用しています。(私が知る限り、変更を適用したい場合は$ scope。$ applyを使用する必要がある状況です)
digest already in progress
エラーは発生しません
scope
角の内側から操作するのか角の外側から操作するのかは常に知っているはずです。したがって、これに応じて、電話が必要かどうかを常に知ってscope.$apply
います。そして、角度scope
操作と非角度操作の両方に同じコードを使用している場合、それは間違っています。常に分離する必要があります...したがって、基本的に、チェックが必要なケースに遭遇した場合scope.$$phase
、コードは正しい方法で設計されており、それを「正しい方法」で実行する方法が常にあります