我理解$digest
和$watch
函数。我发现只要model
的值发生变化,angular
再次运行$digest
,如果model
的值频繁变化,则angular
会引发无限循环错误。
好的,这个例子抛出了infinite error
<div ng-repeat="user in getUsers()">{{ user.name }}</div>
...
$scope.getUsers = function() {
return [ { name: 'Hank' }, { name: 'Francisco' } ];
};
但是这段代码不会抛出任何infinite loop
错误。为什么会这样?这个例子也应该抛出错误
<div> {{getUsers()}}</div>
...
$scope.getUsers = function() {
return [ { name: 'Hank' }, { name: 'Francisco' } ];
};
因为根据文档getUser
函数,无论如何都会在每种情况下都返回一个新数组。
由于
答案 0 :(得分:3)
因为您正在使用ng-repeat指令。它有可能运行数千或数十万次迭代,因此即使数组中只有2个项目,也会引发错误。
预防措施的排序。
应该是这样的:
<div ng-repeat="user in getUsers()">{{ user.name }}</div>
...
var users = [ { name: 'Hank' }, { name: 'Francisco' } ];
$scope.getUsers = function() {
// Same array returned each iteration, no model changes.
return users;
};