角度无限循环 - $ digest()和$ watch()函数

时间:2016-03-28 06:58:00

标签: angularjs

我理解$digest$watch函数。我发现只要model的值发生变化,angular再次运行$digest,如果model的值频繁变化,则angular会引发无限循环错误。

Example from 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函数,无论如何都会在每种情况下都返回一个新数组。

由于

1 个答案:

答案 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;
};