2012-11-07 47 views
3

在下面請看:

https://dl.dropbox.com/u/4571/musicopeTypescript/musicopeTypescript/index.html

當你輸入

「一」,在輸入框中,你得到10 $digest() iterations reached. Aborting!錯誤。

你有什麼想法嗎,爲什麼會發生?

編輯:這裏是使問題的代碼:

http://embed.plnkr.co/PTkvPc

編輯:它看起來是Song.clone的問題。如果我用angular.copy替換它,那麼它就可以工作。任何人都可以解釋這一點?

這裏的工作版本:

http://plnkr.co/edit/8Jk1pR?p=preview

回答

4

您的過濾器是否以某種方式修改原始數據?這是唯一看起來會導致無限摘要循環的特定事物。

編輯:關於不同的克隆功能會導致不同的行爲。

我懷疑是在做深入的克隆,另一個不是,在某些情況下,AngularJS檢查對象是否相等,並且您的過濾器每次都會創建新對象,從而導致問題。

我建議分解一些邏輯,也許可以把它移動到控制器或其他過濾器中。縮小數組的過濾器應該只是這樣做的,只是返回對原始對象的引用。然後,您可以編寫其他過濾器來操作標籤等。

對於Abba也是+1。 :P

+1

那麼我試圖通過將舊數據複製到新數據來避免這種情況。但似乎Song.clone函數是錯誤的。看到我的第一篇文章。 –

+0

相應地更新了我的答案。 – btford

+0

聽起來是一個合理的建議。謝謝! –

4

爲了理解爲什麼發生這種情況,這是很好理解how angular works runtime。基本上有一些觀察者不斷返回不同的值,因此它會持續通過$ digest循環,然後停止無限循環。從他們的$digest() documentation

處理當前範圍及其子級的所有觀察者。因爲觀察者的監聽者可以改變模型,所以$ digest()不斷調用觀察者,直到沒有更多的監聽者開火。這意味着有可能陷入無限循環。這個函數會拋出'超出最大迭代限制'。如果迭代次數超過10

不知道你的代碼是幹什麼的,很難給出具體的解決方案,這是爲什麼在你的情況發生,但是這應該回答你的問題,至於何時這個錯誤拋出。

+1

是的,你是對的,它是關於無限遞歸的東西。我只是不知道爲什麼它會一再呼籲。我已經準備好了小型運動員。看到我的第一篇文章。 –

相關問題