1

5月のアプリでは、タスクを保持するサービスがあります:

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 に答える