Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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 &引用;已达到10$digest()迭代次数。流产&引用;由于使用angularjs进行过滤_Javascript_Filter_Angularjs - Fatal编程技术网

Javascript &引用;已达到10$digest()迭代次数。流产&引用;由于使用angularjs进行过滤

Javascript &引用;已达到10$digest()迭代次数。流产&引用;由于使用angularjs进行过滤,javascript,filter,angularjs,Javascript,Filter,Angularjs,请看以下内容: 当您在输入框中键入“a”时,您将获得所达到的10$digest()迭代次数。流产错误 你知道为什么会这样吗 编辑:以下是产生问题的代码: 编辑:这似乎是Song.clone的问题。如果我用angular.copy替换它,那么它可以工作。有人能解释吗 以下是工作版本: 要理解为什么会发生这种情况,最好理解一下。基本上,有一些观察器不断返回不同的值,因此它不断通过$digest循环,然后阻止它无限循环。从他们的: 处理当前作用域及其子级的所有观察者。因为观察者的监听器可以更改模型

请看以下内容:

当您在输入框中键入“a”时,您将获得所达到的
10$digest()迭代次数。流产错误

你知道为什么会这样吗

编辑:以下是产生问题的代码:

编辑:这似乎是Song.clone的问题。如果我用angular.copy替换它,那么它可以工作。有人能解释吗

以下是工作版本:


要理解为什么会发生这种情况,最好理解一下。基本上,有一些观察器不断返回不同的值,因此它不断通过$digest循环,然后阻止它无限循环。从他们的:

处理当前作用域及其子级的所有观察者。因为观察者的监听器可以更改模型,$digest()会一直调用观察者,直到不再触发监听器。这意味着有可能进入无限循环。如果迭代次数超过10,此函数将抛出“超出最大迭代限制”


在不知道代码在做什么的情况下,很难给出具体的解决方案来解释为什么会发生这种情况,但这应该可以回答您关于何时抛出此错误的问题。

您的过滤器是否以某种方式修改了原始数据?这是唯一一个看起来会导致无限消化循环的特殊现象

编辑:对于不同的克隆功能,会导致不同的行为

我怀疑一个正在进行深度克隆,另一个没有,在一个案例中,AngularJS正在检查对象相等性,而您的过滤器每次都在创建新对象,从而导致了问题

我建议分解一些逻辑,也许将其中的一部分移动到控制器或其他过滤器中。缩小数组范围的过滤器只应该这样做,并且只返回对原始对象的引用。然后您可以编写其他过滤器来操作标记等


对于Abba,也是+1:P

是的,你是对的,它是关于无限递归的。我只是不知道为什么它一次又一次地打电话。我已经准备好了一份小礼物。请看我的第一篇文章。我试图通过将旧数据复制到新数据来避免这种情况。然而,似乎Song.clone函数是错误的。看我的第一篇文章。相应地更新了我的答案。听起来是一个合理的建议。谢谢我发现我的过滤器从一个简单的过滤器演变成了一个指令,它导致了这个无限循环。一旦我把它转换成指令,它就工作得很好!