为什么是$scope$这里需要apply()来进行简单的删除,以及'这是推荐的方法(因为有了它,就会抛出一个错误

Why is $scope.$apply() needed here for a simple delete, and what's the recommended way (since with it, it throws an error)?

本文关键字:因为 方法 一个 错误 apply scope 这里 为什么 以及 简单 删除      更新时间:2023-09-26

我只需要从范围内的项中删除一个属性。如果没有$scope.$apply(),则不会删除该属性。使用$apply时,会抛出一个错误"[$rootScope:inprog]$apply already 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 already in progress"错误)

如果没有$apply,则不会删除该属性。以下(奇怪的)也不起作用:

$scope.$apply(function(){
    delete $scope.presets[key].loadStatus
});

该函数是从hg-click指令直接调用的。

(根据评论编辑)

尝试在apply函数中包装整个foreach。除非迭代预设需要很长时间,否则没有真正的理由为循环中的每个项目运行它:

 $scope.loadPreset = function($event){
     $scope.$apply(function(){
        angular.forEach($scope.presets, function(preset, key) {
            if($scope.presets[key].hasOwnProperty('loadStatus')) { 
                delete $scope.presets[key].loadStatus
             }
        });
     });
    };
相关文章: