Angular JS更新ng-repeat

时间:2014-05-01 21:18:48

标签: angularjs

我想用角度js编写时间跟踪器。 我有下一个HTML代码

            <tr ng-repeat="task in tasks">
                <td>1</td>
                <td>{{task.name}}</td>
                <td class="text-right">{{task.time}}</td>
            </tr>

我有模型任务

    function Task(name, time) {
        this.name = name;
        this.time = time;

        this.incrementTime = function($scope) {
            this.time++;
        }
    }

所以我想在控制器中每秒更新一次任务 像这样的东西

function TaskController($scope, $interval) {
    $scope.tasks = [];

    $scope.addTask = function() {
        var task = new Task($scope.task, 0);
        $interval( task.incrementTime, 1000 );
        $scope.tasks.unshift(task);
        $scope.task = '';
    }
}

但我的表不更新任务

3 个答案:

答案 0 :(得分:1)

使用$interval服务并将incrementTime函数传递给区间

function TaskController($scope, $interval) {
   $scope.tasks = []

   $scope.addTask = function() { 
     //add task 
     var task = new Task($scope.task, 0);
     $interval( task.incrementTime, 1000 );
     $scope.tasks.push(task);
   }
}

并调整Task构造函数,以便该incrementTime引用正确的时间变量:

function Task(name, time) {
    var self = this;

    this.name = name;
    this.time = time;

    this.incrementTime = function() {
        self.time++;
    }
}

Fiddle

答案 1 :(得分:0)

您将var task设置为新任务,而不是更新现有任务。像$scope.task.incrementTime()这样的东西就是你想要的东西

答案 2 :(得分:0)

正如Gruffy Bunny所提到的,你应该使用$ interval而不是setInterval。 $ interval是setInterval的包装器,但是$ interval使得setInterval没有的基本功能是使用$ scope.apply(yourCallback)包装回调调用,这会启动一个消化周期,这将会检查你的范围模型并最终将更新你的观点。