Pergunta

Ao chamar $guardar em um ngResource, é possível POSTAR apenas campos editados ao invés de Postar o modelo inteiro de cada vez?

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}
});
Foi útil?

Solução

Não, não é possível, pelo menos não em instâncias, consulte http://docs.angularjs.org/api/ngResource.$recursos

[...] Os métodos de ação sobre o objeto de classe ou de instância de objeto pode ser chamado com a seguinte parâmetros:

  • HTTP GET "classe" ações: Resource.action([parameters], [success], [error])
  • não-GET "classe" ações: Resource.action([parameters], postData, [success], [error])
  • não-GET instância de ações: instance.$action([parameters], [success], [error])

Assim, é possível apenas por passar os dados para guardar para a "static" salvar método, ou seja, User.save.Algo como isto:

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

Se isso funciona para você, provavelmente, irá depender do que você vai fazer com o user instância.

Outras dicas

Quando eu quero salvar apenas um campo, eu uso o estático .save() método, com uma chamada de retorno que leva para a resposta a partir de que e atualiza o objeto sobre o sucesso:

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

Isso pressupõe que, quando uma solicitação POST é enviada para o recurso (ou seja, /modelnames/:id), o servidor responde com a mais recente versão atualizada do modelInstace.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top