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);
    }

これは、私のToDoがリストに表示され、サーバーへの呼び出しが機能し、アイテムがデータベースに追加される限り機能します。ただし、リストにプッシュしたので、まだIDがありません。IDは、MySQLデータベースの自動インクリメントIDによって生成されます。私のサーバーはオブジェクトをJSON形式で返すので、データバインディングを機能させるには、ある種のコールバック関数を指定する必要があると思いますか?正確に何をする必要があるので、サーバーがデータを返すと、追加されたToDoが正しい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 に答える