1. 程式人生 > >angular $digest 執行10次貨10次以上會丟擲異常

angular $digest 執行10次貨10次以上會丟擲異常

今天在做專案時,遇到一個問題,紅圈處輸入其他數字(n多次)也不會報異常,但是有一種特例,即0,1,0,1,0,1這種順序輸入時,輸入第13次時,頁面計算結果(藍色圓圈)不會更新,困擾了1天多這個問題,

曾嘗試著用watch 函式監聽紅色圓圈處的值,但是後來發現,讓angular 強制更新,但是頁面卻不更新,最後放棄了這種方法。

在digest迴圈中,AngularJS會遍歷整個$watch列表,所有watcher都會被觸發,當一個wathcer被觸發時,AngularJS會檢測Scope模型相應的資料,如果它發生了變化,那麼關聯到該watcher的回撥函式就會被觸發。
  如果執行了一次digest迴圈後某個值發生了變化,那麼AngularJS會再次迴圈,直至不再有任何變化。這是因為你在$watch中更新某個值,如果該值對應的$watch已在這遍迴圈通過,AngularJS將檢測不到變化無法更新。如果迴圈運行了10次或更多次,AngularJS會丟擲異常並停止。(就算沒有更新值,AngularJS也會多執行一次來確保沒有改變,也就是至少執行兩次)
---------------------
作者:wu50401
版權宣告:本文為博主原創文章,轉載請附上博文連結!