0

ngResourceで$saveを呼び出す場合、モデル全体を毎回POSTするのではなく、編集したフィールドのみをPOSTすることはできますか?

var User = $resource('http://example.com/user/123/');

User.get(function(user) {
  user.name="John Smith";
  user.$save();
  // What I *want* -> POST: /user/123/ {name:'John Smith'}
  // What currently happens -> POST: /user/123/ {name:'John Smith', age: 72, location: 'New York', noOfChildren: 5}
});
4

2 に答える 2

1

1つのフィールドのみを保存する場合は、静的.save()メソッドを使用します。コールバックは、そこから応答を受け取り、成功するとローカルオブジェクトを更新します。

$scope.saveOneField = function(modelInstance) {
  ModelName.save({
    id: modelInstance.id,
    theField: <some value>
  }, function(response) {
    // If you want to update *all* the latest fields:
    angular.copy(response, modelInstance.data);
    // If you want to update just the one:
    modelInstance.theField = response.data.theField;
  });
};

これは、POSTリクエストがリソース(つまり/modelnames/:id)に送信されると、サーバーが最新の更新バージョンのmodelInstaceで応答することを前提としています。

于 2013-09-27T02:44:08.077 に答える
0

いいえ、それは不可能です。少なくともインスタンスでは不可能です。http://docs.angularjs.org/api/ngResource.$resourceを参照してください

[...]クラスオブジェクトまたはインスタンスオブジェクトのアクションメソッドは、次のパラメータを使用して呼び出すことができます。

  • HTTP GET「クラス」アクション:Resource.action([parameters], [success], [error])
  • 非GET「クラス」アクション:Resource.action([parameters], postData, [success], [error])
  • 非GETインスタンスアクション: instance.$action([parameters], [success], [error])

したがって、保存するデータを「静的」保存メソッドに渡すことによってのみ可能User.saveです。このようなもの:

User.get(function(user)
{
    user.name = 'John Smith';
    User.save({name: user.name});
});

これがうまくいくかどうかは、おそらくuserインスタンスで何をするかによって異なります。

于 2012-10-02T15:53:58.817 に答える