我正在使用这样的递归ng-repeat
呈现树结构:
<div class="folder-item"
ng-repeat="place in places"
<div class="folder-children"
ng-repeat="data in place.children"
ng-include="'tree_item_renderer.html'">
</div>
</div>
和模板:
<script type="text/ng-template"
id="tree_item_renderer.html">
<div>
<!-- some irrelevant code -->
<div ng-if="data.children">
<div class="folder-children"
ng-repeat="data in data.children"
ng-include="'tree_item_renderer.html'"></div>
</div>
</div>
</script>
这很好,直到有10个或更多级别深,然后我得到10 $digest() iterations reached
错误被抛出。
我该如何解决?到目前为止我找不到任何解决方案。
答案 0 :(得分:2)
10个摘要循环的限制是为了防止由10个继承的作用域引起的性能问题(其中一个作用域的任何更改都会触发所有10个作用域的摘要周期,这是一项非常昂贵的任务。 / p>
如docs所述,您可以更改最大摘要周期数,但您应该记住:
增加TTL可能会影响性能,因此如果没有正确的理由,就不应该更改它。
将数量从10增加到配置块:
angular.module('myApp',[])
.config(function($rootScopeProvider) {
$rootScopeProvider.digestTtl(number); //some number bigger then 10
})
另一种方法是在没有性能损失的情况下,编写一个指令,在内部实现递归,并在内部管理更改。
答案 1 :(得分:1)
默认情况下,Angular通过identity =&gt;跟踪对象尝试在ng-repeat中使用$ index跟踪:
ng-repeat="data in data.children track by $index"