有時我需要在我的代碼中使用$scope.$apply
,有時它會拋出「摘要已在進行中」錯誤。所以我開始找到解決辦法,發現這個問題:AngularJS : Prevent error $digest already in progress when calling $scope.$apply()。然而,在評論(以及在維基上),您可以閱讀:
不要這樣做(!$ scope。$$階段)$ scope。$ apply(),它表示您的$ scope。$調用堆棧中apply()不夠高。
所以現在我有兩個問題:
- 究竟爲什麼這是一個反模式?
- 如何安全地使用$ scope。$ apply?
另一種「解決方案」,以防止「消化正在進行中」的錯誤好像是用$超時:
$timeout(function() {
//...
});
是不是要走的路?它更安全嗎?所以這裏是真正的問題:我怎樣才能完全消除「摘要已在進行中」錯誤的可能性?
PS:我只使用$ scope。$ apply在非同步的非angularjs回調函數中。 (據我知道這些情況下,你必須使用$範圍的情況下,如果要應用更改$應用)
從我的經驗,你應該總是知道的,如果你是從內部的角度或從操作'scope'在角度之外。所以根據這個你總是知道,如果你需要調用'scope。$ apply'或不。如果你使用相同的代碼來處理角度/非角度的「範圍」操作,那麼你做錯了,它應該總是分開的......所以基本上,如果遇到需要檢查範圍的情況。$$階段',你的代碼沒有以正確的方式設計,並且總是有一種方法可以'正確的方式' – doodeec
我只在非角度回調中使用它(!)這就是爲什麼我困惑 –
如果它是非角度的,它不會拋出已經在進行中的'摘要'錯誤 – doodeec