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
我在 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