Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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 1.x摘要循环运行3次_Javascript_Angularjs_Angularjs Digest - Fatal编程技术网

Javascript 如何强制Angular 1.x摘要循环运行3次

Javascript 如何强制Angular 1.x摘要循环运行3次,javascript,angularjs,angularjs-digest,Javascript,Angularjs,Angularjs Digest,这是一个有点理论性的问题,但对于我理解Angular 1.x中的摘要循环是如何工作的很重要 我理解为什么摘要循环通常会运行两次。一次用于检测更改,另一次用于确保没有观察到的表达式是“脏的” 我还可以很容易地编造一个例子,将循环放入一个无限循环,从而超过10次并导致它抛出异常 但是,当循环运行超过两次但少于10次时,会出现什么情况(举个例子)?似乎在循环中的某个地方存在逻辑,可以对表达式进行神奇的重新检查或对表达式进行排队,或者使其始终只运行2次。一次更新所有更改的值,一次验证没有任何更改 例如,

这是一个有点理论性的问题,但对于我理解Angular 1.x中的摘要循环是如何工作的很重要

我理解为什么摘要循环通常会运行两次。一次用于检测更改,另一次用于确保没有观察到的表达式是“脏的”

我还可以很容易地编造一个例子,将循环放入一个无限循环,从而超过10次并导致它抛出异常

但是,当循环运行超过两次但少于10次时,会出现什么情况(举个例子)?似乎在循环中的某个地方存在逻辑,可以对表达式进行神奇的重新检查或对表达式进行排队,或者使其始终只运行2次。一次更新所有更改的值,一次验证没有任何更改

例如,哪一组观察程序会导致此执行3次

我一直在尝试想出一个例子,让一个自定义的观察者对一些被观察的$scope.prop做一些副作用,但是摘要循环不会运行两次以上

换句话说,如果观察者以这种有限的方式产生副作用:

if (some limited condition) change another watched $scope.property
然后,摘要循环只运行2次

如果观察者在触发副作用的条件没有任何限制的情况下产生副作用,则会产生无限循环(可以理解)。例如:

$scope.someProp++
是否有一个示例说明如何强制摘要循环运行3次?这几乎就好像它在某种程度上确保所有的更改都发生在第一个循环中,在第二个循环中检查所有道具是否有dirty=false,这样它就可以停止

第二个循环不是为了确保第一个循环没有任何改变吗?如果是这样,则必须能够触发某种情况,即在第一个循环中发生了变化,但在第二个循环中才被检测到,从而使第3个循环成为最终的“干净”循环,而不仅仅是在第二个循环中停止

只是想弄明白这整件事是怎么回事


谢谢

有点做作,但是嘿;)使用
$scope.$watch
实现的欧几里德算法。正如您所能看到的,有时会出现停止条件,就像在本例中一样。当
b==0
时,消化循环停止

所以我猜,任何类似的情况下,当基于某个条件改变范围中的值时,会触发超过2次,但不是无限次

angular.module('app',[]);
有棱角的
.module('应用程序')
.controller('示例',函数($scope){
$scope.a=45;
$scope.b=375;
$scope.$watch('a',function(){
log($scope.a,$scope.b);
如果($scope.b!==0){
const temp=$scope.b;
$scope.b=$scope.a%$scope.b;
$scope.a=温度;
}
});
});

{{a}

考虑一个控制器和两个变量:
a
b
。控制器指定规则:
$scope.$watch('a',function(newval){b=newval+1})
。视图还监视
a
b
,并通过按钮定义
ng click=“a=10”
。用户按下按钮,
a
变为10并运行摘要(1)。Angular注意到监视的值已更改,并启动该函数<代码>b
变为11,并运行第二个摘要(2)。在第二个摘要中,Angular注意到
b
已更改,并从视图中调用更改侦听器。然后运行最终摘要(3),注意到没有任何更改并停止。