Angularjs 初始化变量一次,以防止;10$digest()迭代次数已达到“;
我正在对控制器中声明的函数返回的列表执行ng重复,并收到“10$digest()迭代已达到。正在中止!”消息Angularjs 初始化变量一次,以防止;10$digest()迭代次数已达到“;,angularjs,Angularjs,我正在对控制器中声明的函数返回的列表执行ng重复,并收到“10$digest()迭代已达到。正在中止!”消息 我发现问题在于调用了几次$scope.list()函数,每次调用该函数时,都会重新分配本地list变量,以便angular每次都能看到不同的对象,并重新绘制ngRepeat元素。如何避免这种情况?我以前没有想过,但我在函数外部声明了list后解决了这个问题,现在函数中返回的元素始终保持相同的引用 MyCtrl = ($scope)-> ... list = {}
我发现问题在于调用了几次
$scope.list()
函数,每次调用该函数时,都会重新分配本地list
变量,以便angular每次都能看到不同的对象,并重新绘制ngRepeat元素。如何避免这种情况?我以前没有想过,但我在函数外部声明了list
后解决了这个问题,现在函数中返回的元素始终保持相同的引用
MyCtrl = ($scope)->
...
list = {}
$scope.list = ->
for e in someArray
.... #adding stuff to list
list
...
我仍然不喜欢我的解决方案,我想知道是否还有其他方法…我还想知道这个函数是否可以只调用一次或几次。在调试过程中,我看到函数多次被调用,就像在作用域中发生变化时一样。如果
someArray
很大,或者如果函数内部的处理速度较慢,则重复调用似乎是一种开销。角度表达式每个$digest至少计算两次,并且$digest一次可以运行10次(当需要“刷新绑定时”)。这意味着表达式将被多次重新计算。
这是一个常见的陷阱与角度。因此,您需要确保不直接在表达式中调用函数。相反,让函数在控制器内执行一次,然后在表达式中使用函数结果:
函数MyCtrl($scope){
函数makeList(){
var列表=[];
//执行一些逻辑来生成一个列表
退货清单;
};
$scope.list=makeList();
}
如果需要直接调用scope方法,请确保这些方法是幂等的。谢谢,我看到了问题所在。
MyCtrl = ($scope)->
...
$scope.list = ->
list = {}
for e in someArray
.... #adding stuff to list
list
...
MyCtrl = ($scope)->
...
list = {}
$scope.list = ->
for e in someArray
.... #adding stuff to list
list
...