2017-04-22 64 views
0

我有兩個指令。每個指令的鏈接中都有一個異步函數,如$httpngResource。我想單擊按鈕A通過指令A從後端獲取數據,然後更改指令B及其視圖中的數據。

我嘗試使用數據服務$boastcast,因爲大多數人都會在指令A和B之間共享數據,並使用$apply來更新視圖。但我經常遇到inprog錯誤。那麼解決這個問題的最好方法是什麼?

+0

嗨。請發佈您的代碼 – Akashii

+2

提供[mcve]。可能甚至不需要廣播,並且很可能不需要$ apply() – charlietfl

回答

0

當你跑步時出現錯誤$scope.$apply。當您嘗試手動運行消化循環,是alread乳寧然後這個異常會發生

所以檢查摘要在使用前運行應用

if(!$scope.$$phase) { $scope.$apply() }

+0

可能它會工作,但今天它被認爲是壞習慣。首先你有$ scope的依賴,我們應該儘量避免。其次,$$階段是內部Angular事物。它可以通過使用包裝代碼im $ timeout而不是$ apply來包裝代碼來解決。只有在循環未運行時,$ timeout纔會調用digest循環。 –

0

而不是包裝代碼$申請,嘗試注入$ timeout並用$ timeout包裝你的代碼。只有當循環未運行時,它纔會以安全的方式運行消化循環。

相關問題