0
我剛剛登上一個新的項目,我看到的角的js代碼這個模式很多:使用超時和範圍應用 - angularjs
_.defer(function() {
$scope.$apply();
});
這似乎是我錯了,但我不確定爲什麼。什麼是可能的原因,你會等待角度插值完成,然後再調用$ scope。$ apply()?
我剛剛登上一個新的項目,我看到的角的js代碼這個模式很多:使用超時和範圍應用 - angularjs
_.defer(function() {
$scope.$apply();
});
這似乎是我錯了,但我不確定爲什麼。什麼是可能的原因,你會等待角度插值完成,然後再調用$ scope。$ apply()?
$apply()
電話$digest()
引擎蓋下,$摘要棱角分明的內部循環,以檢查是否有綁定的數據已經改變。 大多數情況下,您不需要打電話給自己,因爲AngularJS會照顧到這一點。
您需要調用$ apply的唯一情況是當您使用外部庫(例如,當您在指令中包裝jquery庫或者使用異步lib如facebook/twitter時)和angular不可能知道關於DOM的變化。
在這些情況下,您可以將代碼包裝在$timeout
之內。這只是一個安全的方式角度調用$應用時,其準備好,而不是冒着錯誤'$digest already in progress error'
是你直接調用$應用。
$timeout (function() {
$scope.update = "something has changed";
});
這種方式更多的是原生的角度方式,而不是使用下劃線庫。
有關詳細解釋,您可以查看this article(有點古老但角度保持不變的核心原則相同)。
可能是爲了避免錯誤「摘要已在進行中」。當Angular正在「消化」數據時,可以改變一個變量。所以也許這種改變不能被角度檢測到,所以需要「$ apply」。我的2cents – AlainIb