0

在 ngResource 上调用 $save 时,是否可以发布已编辑的字段而不是每次都发布整个模型?

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

当我只想保存一个字段时,我使用静态.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 回答