我只需要從範圍內的項目中刪除屬性。 沒有$scope.$apply()
,該屬性未被刪除。 使用$apply
時,出現錯誤「[$ rootScope:inprog] $ apply already progress in progress」。
爲什麼,那麼做到這一點的「正確」方法是什麼?
$scope.loadPreset = function($event){
angular.forEach($scope.presets, function(preset, key) {
if($scope.presets[key].hasOwnProperty('loadStatus')) {
delete $scope.presets[key].loadStatus;
$scope.$apply();
}
});
};
(這個工作,但拋出一個「$已經申請中」錯誤)
沒有$apply
,財產沒有被清除。而下面的(奇怪)無法正常工作或:
$scope.$apply(function(){
delete $scope.presets[key].loadStatus
});
的功能是直接從hg-click
指令調用。
(編輯基礎上的評論)
'$這裏不需要apply'除非'loadPreset'跳閘外消化週期(這顯然不是,因此你的錯誤) - 你怎麼知道這個密鑰沒有被刪除? – tymeJV 2014-10-30 15:05:18
這也是我的想法,但沒有它就無法工作。密鑰永遠不會被刪除:-)。至少現在,這是一個後來的擔心。 – Pim 2014-10-30 15:08:17
反正你似乎有一個奇怪的錯字。 '$ scope。$ apply'需要一個函數。你通過它'刪除$ scope.presets [key] .loadStatus'。另外,爲什麼你不能使用'$ scope.presets [key] .loadStatus = null;刪除$ scope.presets [key] .loadStatus'(不適用) – Ian 2014-10-30 15:13:29