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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top