Angular $digest 循环刷新整个视图而不是一部分

Angular $digest cycle refreshes the entire view instead of a portion

我在 Angular 1 中遇到了一个奇怪的问题,它导致脚本进入 无限循环 并最终导致浏览器挂起。

这是我想要做的

<script>
    $scope.A = true;
    $scope.B = [{blah},{blah}];
    $scope.updateB = function(){
        $scope.B.push({blah});
    }
    $scope.D = function(key){
        $scope.A = false;
        return key.name;
    }
</script>

    <div ng-if="A">
        <button ng-click="updateB()"></button>
    </div>

    <div ng-repeat="key in B">
      {{D(key)}}
    </div>

所以基本上我想在按下按钮后先隐藏div。我知道我可以在 "updateB" 函数中做到这一点。但是不,我想在计算表达式后在 "D" 中执行此操作。它进入了一个无限循环。

有人可以告诉我这里出了什么问题吗?

发生这种情况是因为您的函数 D() 将在每个 angular 摘要周期执行。即使 B 中只有一个元素。 如果你在 B 上没有元素,你的函数将不会被执行。

这可能有助于您了解摘要循环的工作原理: The Digest Loop and $apply and Understanding the Digest Cycle