Lançamento apenas os campos alterados em $guardar um $de recursos
-
12-12-2019 - |
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}
});
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.