1. ホーム
  2. angularjs

[解決済み] AngularJSの$evalAsyncと$timeoutの違いは何ですか?

2022-04-20 06:54:48

質問

AngularJSを使い始めてからしばらく経ちますが、その間に タイムアウト は、時々(通常はjQueryプラグインを起動するためと思われる)。

最近、ダイジェスト・サイクルをより深く理解しようとしているところ、次のようなものに出会いました。 $evalAsync という関数があります。

と似たような結果が得られるようですが、その関数は $timeout ただ、遅延を与えないだけです。私はこれまで $timeout を使うべきだったのでしょうか? $evalAsync の代わりに

両者に根本的な違いはあるのでしょうか?また、どのような場合にどちらを使うのでしょうか?どのような場合にどちらを使うのか、感覚をつかみたいのですが。

どのように解決するのですか?

私は最近、この質問に対して本質的な答えを出しました。 https://stackoverflow.com/a/17239084/215945 (その回答は、Miskoとのいくつかのgithubでのやりとりにリンクしています)。

要約すると

  • を使用してコードがキューイングされている場合 ディレクティブからの $evalAsync を実行する必要があります。 の場合、AngularによってDOMが操作されますが ブラウザがレンダリングする
  • を使用してコードがキューに入れられた場合 コントローラからの$evalAsync を実行する必要があります。 前に は、Angular によって DOM が操作される前(そしてブラウザがレンダリングする前)である必要があります。
  • を使用してコードがキューに入れられた場合 タイムアウト を実行する必要があります。 は、AngularによってDOMが操作され、そして ブラウザがレンダリングするとき(場合によってはちらつきが発生する可能性があります)。