看看以下内容:
https://dl.dropbox.com/u/4571/musicopeTypescript/musicopeTypescript/index.html
在输入框中键入“a”时,会出现10 $digest() iterations reached. Aborting!
错误。
你有什么想法,为什么会这样?
编辑:以下是产生问题的代码:
编辑:看起来这是Song.clone的问题。如果我用angular.copy替换它,那么它的工作原理。任何人都可以解释一下吗?
以下是工作版本:
答案 0 :(得分:4)
要理解为什么会这样,理解how angular works runtime是件好事。基本上有观察者不断返回不同的值,因此它继续通过$ digest循环,然后阻止它无限循环。来自$digest() documentation:
处理当前范围及其子项的所有观察者。因为观察者的监听器可以改变模型,所以$ digest()不断调用监视器,直到不再有监听器被触发为止。这意味着可以进入无限循环。此函数将抛出“超出最大迭代限制”。如果迭代次数超过10次。
在不知道你的代码在做什么的情况下,很难给出一个特定的解决方案来解决为什么会发生这种情况,但这应该回答你关于什么时候抛出这个错误的问题。
答案 1 :(得分:4)
您的过滤器是否以某种方式修改了原始数据?这是唯一一个看起来会导致无限消化周期的特定事物。
编辑:关于不同的克隆功能会导致不同的行为。
我怀疑一个人正在进行深度克隆,另一个则没有,并且在一个案例中,AngularJS正在检查对象相等性,并且您的过滤器每次都在创建新对象,从而导致问题。
我建议分解一些逻辑,并将其中的一部分移动到控制器或其他过滤器中。缩小数组的过滤器应该只是这样做,只返回对原始对象的引用。然后你可以编写其他过滤器来操纵标签等。
同样为阿巴+1。 :P