3

在发布到我的服务器时,我对实现双向数据绑定的方式有些困惑。

我这样定义我的资源:

angular.module('todoServices', ['ngResource']).
    factory('Todo', function($resource){
  return $resource('api/v1-0/todos/:todoId', {}, {
    query: {method: 'GET', params:{todoId:''}, isArray: true},
    save: {method: 'POST', isArray: true}
  });
})

我将 Todo 资源作为依赖项传递给我的控制器。

然后在我的控制器中,我有一个方法可以将一个新的 Todo 项目添加到我的列表中:

    $scope.addTodo = function() {
        var savedModel = new Todo();
        savedModel.title =  $scope.title;
        savedModel.description = $scope.description,
        //...
        savedModel.$save();
        $scope.todos.push(savedModel);
    }

只要我的待办事项出现在列表中,这就是有效的,对服务器的调用有效并且该项目被添加到我的数据库中。但是,因为当我将它推送到我的列表时,它还没有 ID。ID 由我的 MySQL 数据库中的自动增量 ID 生成。我的服务器以 JSON 格式返回对象,所以我假设,我必须指定某种回调函数才能使数据绑定工作?我到底需要做什么,所以一旦我的服务器返回数据,我添加的待办事项就会更新为正确的 ID?

4

1 回答 1

4

只需将返回的对象分配给savedModel对象。由于对资源的调用是异步的并返回一个 Promise,因此您应该以这种方式使用 success 函数:

 savedModel.$save(
     function success(savedModel) {
         $scope.todos.push(savedModel);
     });

顺便检查一下save方法的isArray属性,通常应该是false

于 2013-02-04T14:48:47.173 回答