2013-05-29 44 views
1

我編寫a Plunker簡化了一個應用程序場景,我正在編寫這種情況。AngularJS在模型更改後不會令人耳目一新的視圖

場景的一點解釋:

  • 沒有加載到$範圍的交易列表(類型交易的對象)
  • 該控制器監聽由服務產生的事件控制器負責持久化新的或更新的交易對象,然後重新加載模型
  • 該視圖使用ng重複呈現交易列表
  • 每個交易可以單獨更新(提交或回滾)
  • 的AngularJS應用程序有創建一個新的事務對象每隔2秒,模擬的是,這些交易都來自外部源(針對服務器的$ HTTP請求,例如)一個run()塊

什麼您將看到在模型在接收到服務產生的事件後重新分配新的對象列表時,不會重新加載視圖。

我一直在拖着我的頭髮脫離過去的48小時。這種行爲最常見的原因是在AngularJS之外修改模型,而不是調用$ apply(),但是(我認爲)並非如此。

還嘗試檢查$範圍。$$階段和調用手動$應用或$摘要(即使這可能被認爲可能是壞的),根本沒有成功。

我做錯了什麼?這是一個錯誤?有沒有其他策略可以應用?

+0

什麼假設發生時,你打一個「手動刷新」按鈕? – Stewie

+0

我想你已經通過下面的答案計算出來了......無論如何,這個按鈕強制重新加載模型(因爲當事件發生時它沒有這樣做) – ggalmazor

回答

2

setInterval也是「Angular之外」,我不確定您是否嘗試過使用$ apply。如果您將transactions.persist(t);包裝在$rootScope.$apply()內的app.js中,您將看到列表每兩秒刷新一次。 「COMMIT」和「ROLL BACK」按鈕生成的更改也會立即顯示。

Working plnkr

+0

感謝您的回答。確實,setInterval會在AngularJS之外。設計場景時沒有想到它。在我的真實應用程序中,沒有setIntervals,我會嘗試修改它以刪除它們並以其他方式模擬新對象。 – ggalmazor

+0

事實證明,你是對的,你已經給我我需要的線索。我有一些其他無關的時間間隔正在運行,即使它們與遇到此問題的進程沒有任何關係,只要我將它們的代碼修復到$ rootScope中即可。$ apply():) – ggalmazor

相關問題