角度服务不更新模型更改

时间:2013-06-21 09:52:08

标签: service angularjs

在may app中我有一项服务可以完成我的任务:

app.factory('Tasks', function () {
    var tasks = [];
    return {
        getAll: function () { return tasks; },
        addOne: function (task) { tasks.push(task); },
        openBy: function(owner) {
            return _.where(tasks, {owner: owner, status: 'open'});
        },
        doneBy: function(owner) {
            return _.where(tasks, {owner: owner, status: 'closed'});
        },
    };
});

然后我按照所有者的要求显示他们的开放任务或已完成的任务。

问题是,当我使用Tasks.addOne(task);更新任务时,使用Tasks.openBy(owner)的视图不会更新。那些使用Tasks.getAll()的人。

这是因为我要返回一个新阵列吗?如果有,有办法告诉控制器更新它有什么?或者我首先完全错误地做了这个并且有更好的方法吗?

非常感谢任何帮助。

马修

1 个答案:

答案 0 :(得分:0)

你可以做的是在控制器(或指令)中而不是在视图中调用openBy函数并将其包装到$ scope。$ watch调用中。举个例子:

// Controller body
app.controller('TasksCtrl', function($scope, Tasks) {
  $scope.allTasks = Tasks.getAll();
  $scope.$watch('allTasks', function() {
    // Assume owner is the user and it's initialised somewhere above
    $scope.ownedTasks = tasks.openBy(owner);
  }, true);
});

这应该有用,即使我认为应该可以做一些更优雅的事情!