1

在可能的应用程序中,我有一项服务可以容纳我的任务:

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()

这是因为我要返回一个新数组吗?如果是这样,有没有办法告诉控制器更新它所拥有的内容?还是我一开始就完全错了,有更好的方法吗?

任何帮助将不胜感激。

马修

4

1 回答 1

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

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

于 2013-06-21T10:29:53.337 回答