2013-06-21 54 views
0

我有一個服務來存放我的待辦事項應用的任務。它有getActive()getCompleted()方法分別返回一個數組和活動的和完成的方法。

我想顯示強制執行任務,活動任務和總任務的數量。我與角的$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: 
+0

對我來說,最好的方法就是定義'getActiveLength()'和'getCompletedLength()',然後觀察這些函數。我相信在觀看它的手錶中調用該功能將會遞歸地觸發另一個手錶。 –

+0

您可能想查看演示應用的源代碼@ http://todomvc.com/architecture-examples/angularjs-perf/#/ –

回答

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

0

我不認爲你應該在你的$watch回調再打電話getActivegetCompleted,實際上你可以將其指定爲function(newValue, oldValue),並有新老值,而無需再次調用該方法,這可能會導致一個$digest循環。

相關問題