在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()
的人。
这是因为我要返回一个新阵列吗?如果有,有办法告诉控制器更新它有什么?或者我首先完全错误地做了这个并且有更好的方法吗?
非常感谢任何帮助。
马修
答案 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);
});
这应该有用,即使我认为应该可以做一些更优雅的事情!