Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular$digest cycle刷新整个视图,而不是部分视图_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript Angular$digest cycle刷新整个视图,而不是部分视图

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;

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

$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重复中迭代)