为什么相同的逻辑在过滤器中达到10 $ digest()迭代但在控制器中没有

时间:2016-11-04 08:54:11

标签: angularjs angularjs-filter

我创建了一个过滤器,用于从复杂的对象数组中提取分组的简单数组:

<li ng-repeat="item in items | myFilter"></li>

我遇到了这个错误:

  

错误:达到10 $ digest()次迭代。中止!

我移动相同的逻辑而不对控制器进行任何更改:

<li ng-repeat="item in myFilterFunction(items)"></li>

它运作正常。 问题是在过滤器中运行相同的代码或在控制器中运行函数之间的区别是什么?

注意:这是说明问题的fiddle,如果您使用过滤器,您将在控制台中看到错误,如果您在控制器中使用该功能而不是过滤器,错误消失了,它正常工作

1 个答案:

答案 0 :(得分:1)

问题是您的过滤器实际上并未过滤输入。它会在每次调用时对其进行转换并创建全新的对象。因此,每次新的摘要周期开始时,在每个摘要周期中,ngRepeat再次调用过滤器。你根本就不能使用过滤器。