2013-08-24 48 views
1

我只是在學習angularjs,並分解了第一個例子,一個連接到todo javascript模型的todo列表。如何在angularjs中限制調用模型函數的頻率?

在HTML中,我們有:

<div ng-controller="TodoCtrl"> 
    <span>{{remaining()}} of {{todos.length}} remaining</span> 

在控制器腳本中,我們有:

$scope.remaining = function() { 

    // --> THIS ALERT IS CALLED ON EACH KEYSTROKE 
    alert('remaining called'); 

    var count = 0; 
    angular.forEach($scope.todos, function (todo) { 
     count += todo.done ? 0 : 1; 
    }); 
    return count; 
}; 

我想這可能會成爲一個延遲問題,如果上的每個按鍵的所有引用控制器必須進行評估。

有什麼辦法可以用來提高效率?

+0

你的頁面還有其他東西嗎?如果有任何與當前作用域綁定的內容,那麼將在每次擊鍵時評估它。 –

回答

2

您可以對作用域使用$ watch方法在待辦事項更改時作出反應。 我不能說這是更好的表現。

$scope.$watch('todos', function() { 
    $scope.remaining = ... // remaining just int 
}, true); 

此外,如果您使用新角度,請參閱$watchCollection方法。

+0

同意這種方式。如果$ todos的值有變化,$ watch纔會被觸發,否則代碼將不會被執行。 –

+0

這樣做,謝謝 –

相關問題