Javascript 仅在$save上过帐$resource的更改字段

Javascript 仅在$save上过帐$resource的更改字段,javascript,angularjs,Javascript,Angularjs,在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

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

不,这不可能,至少在实例上不可能,请参见

[…]类对象或实例对象上的操作方法可以通过以下方式调用 参数:

  • HTTP获取“类”操作:
    Resource.action([parameters]、[success]、[error])
  • 非获取“类”操作:
    Resource.action([parameters]、postData、[success]、[error])
  • 非获取实例操作:
    instance.$action([parameters]、[success]、[error])
因此,只有将要保存的数据传递到“静态”保存方法,即
User.save
,才有可能。大概是这样的:

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

这是否适用于您可能取决于您将如何处理
用户
实例。

当我只想保存一个字段时,我使用静态的
.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;
  });
};
$scope.saveOneField=函数(modelInstance){
ModelName.save({
id:modelInstance.id,
现场:
},功能(回应){
//如果要更新*所有*最新字段:
复制(响应,modelInstance.data);
//如果您只想更新一个:
modelInstance.theField=response.data.theField;
});
};

这假设当POST请求发送到资源(即,
/modelnames/:id
)时,您的服务器会以最新更新版本的ModelInstance进行响应。

这是否成功?我正在努力解决类似的问题:一个$resource,它返回大量数据,但我只想一次更新一点点数据。