AngularJS $ watch:达到10 $ digest()迭代次数

时间:2013-06-21 15:30:38

标签: angularjs

我有一个服务,可以保存我的待办事项应用程序的任务。它有getActive()getCompleted()方法,分别返回一个带有active和completed方法的数组。

我想显示强制,有效和总任务的数量。我用angular $watch

做这个
$scope.active = tasks.getActive().length;
$scope.completed = tasks.getCompleted().length;

$scope.$watch(tasks.getActive, function() {
  $scope.active = tasks.getActive().length;
}); 

$scope.$watch(tasks.getCompleted, function() {
  $scope.completed = tasks.getCompleted().length;
});

它工作正常,但每次我更改任务状态或删除它时都会向控制台抛出很多错误。

Uncaught Error: 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations:

2 个答案:

答案 0 :(得分:1)

我认为你不需要那些手表。在AngularJS中,视图中的大多数表达式都会动态更新,因此您可以直接使用tasks.getCompleted().length,例如:

$scope.active = function(){
    return tasks.getActive().length;
};
$scope.completed = function(){
    return tasks.getCompleted().length;
};

关于10个摘要错误,请参阅Maxing out on $digest iterations

答案 1 :(得分:0)

我认为您不应该在getActive回调中再次呼叫getCompleted$watch,您实际上可以将其指定为function(newValue, oldValue)并拥有新旧值而不必再次调用该方法,这可能会导致$digest循环。