Restangular如何更新集合中的项目

时间:2015-01-18 14:41:29

标签: angularjs rest restangular

我目前正忙着使用restangular和ui-router。

我确实在路由器中解析了一系列项目,使其可供底层控制器使用。我有一个待办事项列表,我想编辑待办事项。所以我加载了一个可以编辑项目的视图。

我通过$scope.todo = todos.get(id)获取模型我对其进行了更改,然后我执行$scope.todo.save()更新服务器上的模型。但是现在我的旧物品仍然存放在待办事项中。

我希望我的收藏能够反映单个项目的变化。我可以从集合中删除该项目,然后重新插入它,但这看起来有点太复杂了。有没有简单的方法来更新集合中的模型?

更新:添加一些代码

注意:如果调用状态,则会解析todos属性。

如果我编辑单个待办事项,我将通过

解决
resolve : {
  todo : function($stateParams, todos) {
    return todos.get($stateParams.id);
  }
}

我做了一些更改,然后拨打todo.save()。此方式不会对集合进行任何更改。我试图做一个todos.patch(todo),但实际上是对奇怪的网址提出了请求,我想这是打算修补整个集合(?)

我确信有一种方法可以更改集合中的模型,但我不知道如何

1 个答案:

答案 0 :(得分:1)

在尝试了一些东西后,我最终更换了集合中的项目。我为lodash创建了一个小帮手,我想在这里展示:

  var replaceItemById = function(list, element) {
    var index = _.indexOf(list, _.find(list, { id : element.id }));

    list.splice(index, 1 , element);

    return list;
  };

  _.mixin({'replaceItemById' : replaceItemById});

当我想要更新集合中的模型时,我会一步一步地进行:

获取集合 从集合中获取单个项目并进行编辑 在项目上调用保存

//The server returns the updated model
todo.save().then(function(editedTodo) {
  _.replaceItemById(todos, editedTodo);
  $state.go('todos.index');
});

这样我就不需要再次获取集合(即使在大多数情况下这是你要做的),并且在更新单个项目后它是最新的。