javascript - Angular - 已达到 10 次 $digest() 迭代。创建数组深拷贝时中止

标签 javascript jquery angularjs arrays

我想在表头中创建带有过滤器的表。过滤器是每列中唯一值的列表。这是简化的代码:

<table>
  <tr>
       <th class="dropdown" ng-repeat="field in data.columns">
         <span>{{field.title}}</span>
         <ul class="dropdown-menu">
           <li ng-repeat="item in unique(data.items, field)"><checkbox> {{item.text}}</li>
         </ul>
       </th> 
  </tr>
  <tr ng-repeat="item in data.items"></tr>
</table>

我对过滤器和表使用相同的对象数组,但过滤器创建数组的副本并从重复的副本值中删除。这就是我的问题。

当我将数组复制为array.slice(0)时,删除的值不在过滤器中,而是在表中(数组包含对象)。我的问题出在引用中,所以我使用 deepcopy 作为 jQuery.extend(true, [], array) 和 Angular 抛出错误:

[$rootScope:infdig] 10 $digest() iterations reached. Aborting! Watchers fired in the last 5 iterations

我的数据如下所示:

[{id: 1, title: 'AAA', something: [{id: 1, text: "A"}]}, {id: 2, title: 'AAAA', something: [{id: 2, text: "AA"}]}]

问题出在属性上(array.slice(0) donť copy and $.extend copy but Angular get error)

感谢您的建议

最佳答案

您还没有发布过滤器的代码,所以我必须假设发生了什么。我认为您在制作副本之前没有检查列表的所有元素是否都是唯一的。这会导致过滤器每个摘要更改数据,从而触发无限数量的摘要 - 因此会出现错误。你的 list 永远不稳定。

要解决这个问题,请在过滤器的开头添加检查元素的唯一性,如果它们已经是唯一的(例如在过滤器的第一次通过之后),则仅返回输入对象。这样模型就会稳定下来。

关于javascript - Angular - 已达到 10 次 $digest() 迭代。创建数组深拷贝时中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43270122/

相关文章:

javascript - 如果未选择所需的输入,则发出警告

javascript - 如何将返回函数绑定(bind)到标记 Angular

javascript - jquery-1.4.1.min.js 和 jquery-1.4.1.js 之间的区别

javascript - jQuery 点击触发禁用移动页面

javascript - 在文件结束前添加和删除文本的正则表达式

javascript - 无法运行本地主机:3000 on meanstack MEANIO, https ://github. com/linnovate/mean

javascript - 如何从目录中读取文件并将其作为 JSON 发送给客户端?

构造函数的 Javascript Date() 参数

javascript - 在 javascript 中显示文本字段的独立自动完成选项

jQuery:当子元素有类时,将类添加到父元素