我已經嘗試所有三個條件刷新範圍後觸發任何事件。有時出現錯誤
$ apply或$ digest已在進行中。
最後,我使用$超時沒有任何錯誤。但我不知道根據複雜性或性能哪一個最好。
我已經嘗試所有三個條件刷新範圍後觸發任何事件。有時出現錯誤
$ apply或$ digest已在進行中。
最後,我使用$超時沒有任何錯誤。但我不知道根據複雜性或性能哪一個最好。
$timeout
調用$apply
它調用$digest
。
更詳細地:
$apply
觸發根範圍$digest
循環(因此在應用程序內的所有範圍)。
$digest
可以直接在特定的子範圍而不是根上調用 - 但父級或兄弟範圍內的觀察者不會被觸發,因此使用$digest
會導致不同範圍明顯不同步。
$timeout
等待下一個消化週期,然後調用$apply
(因此基本上是一個簡單的方法來調用$apply
,而不必擔心「已經消化進步」的錯誤。)較新的$evalAsync
是類似的,但適用於當前摘要如果可能的話,所以有時比$timeout
略高一些。 (也有$applyAsync
這是據我可以基本上告訴$timeout
延遲10ms,因爲我敢肯定對某人有意義的原因。)
TL; DR:讓Angular管理自己的數據生命週期爲儘可能多。當你需要的時候,使用$evalAsync
(或者,老實說,$timeout
已經足夠接近;差別不是那顯着)。
如果您開始遇到性能問題,您可以開始查找可以安全切換到在特定範圍上使用$digest
的情況。 (就我個人而言,我沒有看到很多情況下,這是值得添加代碼複雜性,但也許這只是我。)
性能是一個非常廣泛的話題。例如,檢查摘要是否正在運行,如果沒有,則調用它可能是最高效的(摘要和應用非常相似)。但我總是使用超時,因爲它們更容易,看起來不那麼不穩定。 – Jackie
在我看來$ timout是最好的辦法 – felipekm
你不應該打電話給他們中的任何人對事件做出反應。只需使用適當的ng-xxx指令即可。 –