我正在对控制器中声明的函数返回的列表执行 ng-repeat,并且收到“已达到 10 $digest() 迭代。正在中止!”信息。
<div ng-repeat element in list()></div>
功能:
MyCtrl = ($scope)->
...
$scope.list = ->
list = {}
for e in someArray
.... #adding stuff to list
list
...
我发现问题是$scope.list()
函数被调用多次,每次调用本地函数list
变量被重新分配,因此 Angular 每次都会看到不同的对象,并且 ngRepeat 元素被重新绘制。我怎样才能避免这种情况?
每个 $digest 的角度表达式至少被评估两次,并且 $digest 可以一次运行 10 次(当绑定需要“刷新”时)。这意味着表达式将被重新计算多次。
这是 Angular 的常见陷阱之一。因此,您需要确保不要直接在表达式中调用函数。相反,让函数在控制器内部执行一次,然后在表达式中使用函数结果:
function MyCtrl($scope){
function makeList(){
var list = [];
// do some logic to generate a list
return list;
};
$scope.list = makeList();
}
<div ng-repeat="element in list"></div>
万一你have直接调用范围方法而不是确保方法是幂等的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)