Javascript Angular$digest cycle刷新整个视图,而不是部分视图
我在Angular 1中遇到了一个奇怪的问题,它导致脚本进入无限循环,最终浏览器挂起 这就是我要做的Javascript Angular$digest cycle刷新整个视图,而不是部分视图,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我在Angular 1中遇到了一个奇怪的问题,它导致脚本进入无限循环,最终浏览器挂起 这就是我要做的 <script> $scope.A = true; $scope.B = [{blah},{blah}]; $scope.updateB = function(){ $scope.B.push({blah}); } $scope.D = function(key){ $scope.A = false;
<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>
$scope.A=true;
$scope.B=[{blah},{blah}];
$scope.updateB=函数(){
$scope.B.push({blah});
}
$scope.D=功能(键){
$scope.A=false;
返回key.name;
}
{{D(键)}
所以基本上我想在按下按钮后隐藏第一个div。我知道我可以在“updateB”函数中完成。但是不,我想在表达式求值之后,在“D”中这样做。它进入一个无限循环。
有人能告诉我这里出了什么问题吗?这是因为函数D()将在每个角度摘要循环中执行。即使B中只有一个元素。 如果B上没有元素,则不会执行函数 这可能有助于您了解摘要周期的工作原理:
和@estus如果我更新B,表达式将被计算,D()将再次被调用,最终$scope.A=false。这个流程中的问题是什么?我认为这是正确的行为。D()将在每个角度循环上调用。如果在B中有一个或多个元素,则会调用函数D()。是的,我知道,D将被多次调用(最大长度为B),但不会在无限循环中调用。也就是说,即使B中只有一个元素,D也会被重复调用。D()的调用长度不会超过B。它会在每个角度摘要循环中被多次调用。这是因为您有一个角度表达式{{D(key)}}。Angular将在每个周期上计算此表达式。@L.Figueredo它是否会在每个摘要周期上计算表达式“{D(key)}}”,即使B未更新?(B在ng重复中迭代)