2016-07-28 45 views
0

我試圖掛接臨時函數進行測試,該函數返回隨機數據以顯示在我的視圖中。這是因爲它陷入循環而引發錯誤,所以我認爲將它切換到單向綁定可以工作,但問題仍然存在。實際的錯誤是:一次性綁定Angular中的隨機值生成方法

[$rootScope:infdig] 10 $digest() iterations reached. Aborting!

當綁定到一個方法調用返回一個隨機值,爲什麼角陷入無限循環?一旦它返回的值不是undefined,表達式不應該停止評估嗎?

plunk

注:我不是在尋找一個解決方法,我已經取代了函數調用一次性生成的隨機值,但我很好奇,想知道爲什麼一次性綁定繼續評估模型應該(從我的理解)穩定後。

回答

1

要理解爲什麼發生這種情況,您需要了解摘要循環。

髒檢查

角是基於 「髒檢查」。 Angular基本上迭代了$scope中的所有屬性以查看發生了什麼變化。如果有任何財產發生變化,Angular會讓所有觀察者知道這些變化

由於手錶可以更改範圍上的屬性,所以Angular在手錶完成後再進行一次髒檢查。消化循環在遍歷所有屬性時停止,並且它看到它們中沒有一個已經改變。

無限摘要當手表一個新的值總是設置爲它不斷將在Math.random()

+0

所以發生的屬性時,單向數據綁定已經在消化週期沒有影響?我認爲它背後的想法是減少觀察者的數量。 –

+0

沒有任何鏈接到$ scope的東西被angularJS連續觀看。這就是框架的工作原理 –