0

我有一项服务可以为我的 todo 应用程序保存任务。它有getActive()getCompleted()方法,它们分别返回带有活动和完成方法的数组。

我想显示已完成、活动和总任务的数量。我是用 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:
4

2 回答 2

1

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

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

至于 10 个摘要错误,请参阅Maxing out on $digest 迭代

于 2013-06-21T15:34:18.533 回答
0

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

于 2013-06-21T15:35:06.740 回答