Publicar solo campos modificados en $ ahorro de un recurso de $
-
12-12-2019 - |
Pregunta
Cuando llame a $ Guardar en un NgRource, ¿es posible publicarlos solo los campos editados en lugar de publicar todo el modelo 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}
});
Solución
No, no es posible, al menos no en las instancias, consulte http:// docs.angularjs.org/api/ngresource.$Resource
[...] Los métodos de acción en el objeto de clase o objeto de instancia se pueden invocar con lo siguiente Parámetros:
- Acciones de la clase "HTTP":
Resource.action([parameters], [success], [error])
- Acciones de clase "no obtendrán":
Resource.action([parameters], postData, [success], [error])
- Acciones de instancia de no get:
instance.$action([parameters], [success], [error])
Por lo tanto, solo es posible al pasar los datos para guardar en el método de guardar "estático", es decir, User.save
.Algo así:
User.get(function(user)
{
user.name = 'John Smith';
User.save({name: user.name});
});
Si esto funciona, probablemente dependerá de lo que va a hacer con la instancia de user
.
Otros consejos
Cuando quiero guardar solo un campo, utilizo el método estático .save()
, con una devolución de llamada que toma la respuesta de eso y actualiza el objeto local en el éxito:
$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;
});
};
Esto supone que cuando se envía una solicitud de publicación al recurso (es decir, /modelnames/:id
), su servidor responde con la última versión actualizada del ModelInStace.