Service 角度服务未在模型更改时更新
在五月应用程序中,我有一个保存我的任务的服务:Service 角度服务未在模型更改时更新,service,angularjs,Service,Angularjs,在五月应用程序中,我有一个保存我的任务的服务: app.factory('Tasks', function () { var tasks = []; return { getAll: function () { return tasks; }, addOne: function (task) { tasks.push(task); }, openBy: function(owner) { return _.w
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)更新任务时代码>使用任务的视图。openBy(所有者)
不会得到更新。使用Tasks.getAll()
do的任务
这是因为我要返回一个新数组吗?如果是这样,有没有办法告诉控制器更新它所拥有的?还是说我一开始就完全错了,有没有更好的方法
任何帮助都将不胜感激
Matthew您可以在控制器(或指令)中调用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);
});
这应该行得通,尽管我认为可能会做一些更优雅的事情 是的,问题是您在openBy(owner)
上返回了一个新数组,之后不会更改/更新该数组。一种解决方案是始终使用getAll()
,然后直接在视图上按用户/状态进行筛选(即任务中的task |筛选:{owner:owner,status:'open'}
)。我已经尝试过了,但我需要它们在视图中是不同的模型,因为我正在从re arrangeAll上的索引更新键,我在$watch中添加了true作为第三个参数,现在它似乎开始工作了。谢谢