【问题标题】:Unable to update object in angular无法以角度更新对象
【发布时间】:2014-01-06 16:56:25
【问题描述】:

现在,我可以创建对象并通过 json api 将它们保存到 rails 数据库。这是一个简单的待办事项列表应用程序,当我添加一个对象时,它会进入输入字段上方的待办事项列表。我还可以查询索引视图上的所有对象并列出我所有的待办事项。

当我点击每个待办事项旁边的复选框时,它应该将它的 :done 属性更改为 true,以便在他们点击 clearCompleted 函数的“清除”按钮后我不再显示它.

这是我的js代码

angular.module("Todo", ["ngResource"])

function TodoController($scope, $filter, $resource) {
  Todo = $resource("/todos.json", {id: "@id"}, {update: {method: 'PUT'}})
    $scope.todos = Todo.query()

  $scope.getTotalTodos = function () {
      return $scope.todos.length;
  };

  $scope.clearCompleted = function () {
    Todo.save({done:true})
    $scope.todos = $filter("filter")($scope.todos, {done:false});
};

  $scope.addTodo = function () {
    entry = Todo.save({title:$scope.newTodo.title, importance:$scope.newTodo.importance, description:$scope.newTodo.description, done:false})
    $scope.todos.push(entry);
    $scope.newTodo.title = '';
    $scope.newTodo.importance = '';
    $scope.newTodo.description = '';
  };

}

发生的情况是,它没有更新数据库中的那个对象,而是创建了一个全新的待办事项,并为其赋予:done => true 的属性。这是有道理的,因为在 clearCompleted 函数中,看起来我们正在创建一个对象而不是更新现有对象。

那我如何更新数据库中的记录呢?

【问题讨论】:

  • 你把id放在param哪里?
  • 你指的是资源方法吗?把它放在那里,因为我正在关注一个 railscast。

标签: javascript ruby-on-rails angularjs


【解决方案1】:

您不应该使用Todo.save({}) 来更新待办事项。正如你所说,它创建了一个新对象。

编写代码如下。

 Todo = $resource("/todos.json", {id: "@id"}, {'save': {method: 'PUT'}})
 $scope.todos = Todo.query();
    var todo =  todos[0];//A todo that should be updated
    todo.done = true;
    todo.$save();

也许你需要在你的保存 url 中为 todo 键设置一个参数。

using $resource

【讨论】:

  • 我们真的得到了第一个待办事项,还是应该得到更新的待办事项?当我们单击复选框时,我们正在尝试更改属性。
  • 看起来保存创建了另一个对象。我将如何更改它以更新属性。
  • 你的服务是 RESTfull 服务吗?
  • 是的。我现在看到的问题是,即使我执行更新方法,也传递了正确的参数,但它是 POST 请求,而不是终端中的 PUT 请求。
  • 试试 {'save': {method: 'PUT'} // 注意单引号并按照我在帖子中提到的那样调用它。
猜你喜欢
  • 2020-11-03
  • 1970-01-01
  • 2018-12-11
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 2020-01-21
相关资源
最近更新 更多