1

我只是在学习angularjs并挑选出第一个示例,一个连接到 todo javascript 模型的 todo 列表。

在 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;
};

我认为如果每次击键都必须评估对控制器的所有引用,这可能会成为延迟问题。

如果有的话,可以使用什么方法来提高效率?

4

1 回答 1

2

您可以在范围上使用 $watch 方法来在待办事项更改时做出反应。我不能说这种方式对性能更好。

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

此外,如果您使用新的角度,请查看$watchCollection方法。

于 2013-08-24T11:19:31.710 回答