複雑なアプリケーションを構築する場合は、選択にパフォーマンスの影響があることに注意してください。また、マークの回答をより技術的な詳細で完了したいと思います。
$ timeout(callback)は、現在のダイジェストサイクルが完了するまで待機し(つまり、すべてのモデルとDOMの角度更新)、コールバックを実行します-潜在的に角度モデルに影響します-次に$apply
ルート$ scopeでフルを起動し、再ダイジェストしますすべて。
一方、$ evalAsync(callback)は、現在または次のダイジェストサイクルにコールバックを追加します。つまり、ダイジェストサイクル内(たとえば、いくつかのng-click
ディレクティブから呼び出された関数内)にいる場合、これは何も待機せず、コードはすぐに実行されます。たとえばのような非同期呼び出し内にいる場合setTimeout
、新しいダイジェストサイクル($apply
)がトリガーされます。
したがって、パフォーマンス$evalAsync
の観点からは、コードを実行する前にビューが最新であることが重要である場合を除いて、たとえば要素の幅などのDOm属性にアクセスする必要がある場合を除いて、常にを呼び出すことをお勧めします。
$ timeout、$ evalAsync、$ digest、$ applyの違いの詳細が必要な場合は、他の質問に対する私の回答を読んでください:https : //stackoverflow.com/a/23102223/1501926
また、ドキュメントも必ずお読みください。
$ evalAsyncは、式がいつ実行されるかを保証しません。
- 評価をスケジュールした関数の後で(できればDOMレンダリングの前に)実行されます。
- 式の実行後、少なくとも1つの$ digestサイクルが実行されます。
注:この関数が$ digestサイクルの外で呼び出されると、新しい$ digestサイクルがスケジュールされます。ただし、$ apply呼び出し内からモデルを変更するコードを常に呼び出すことをお勧めします。これには、$ evalAsyncを介して評価されるコードが含まれます。