Question

Lors de l'appel de $save sur un ngResource, est-il possible de POST seulement les champs modifiés plutôt que de publier l'intégralité du modèle à chaque fois ?

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}
});
Était-ce utile?

La solution

Non, ce n'est pas possible, du moins pas dans certains cas, voir http://docs.angularjs.org/api/ngResource.$resource

...] Les méthodes d'action sur l'objet de classe ou l'objet d'instance peuvent être invoquées avec les paramètres suivants:

  • Actions "classe" HTTP GET : Resource.action([parameters], [success], [error])
  • actions de « classe » non-GET : Resource.action([parameters], postData, [success], [error])
  • actions d'instance non-GET : instance.$action([parameters], [success], [error])

Cela n'est donc possible qu'en transmettant les données à sauvegarder à la méthode de sauvegarde "statique", c'est-à-dire User.save.Quelque chose comme ça:

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

Que cela fonctionne pour vous dépendra probablement de ce que vous comptez faire avec le user exemple.

Autres conseils

Lorsque je veux sauvegarder un seul champ, j'utilise le statique .save() méthode, avec un rappel qui prend la réponse et met à jour l'objet local en cas de succès :

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

Cela suppose que lorsqu'une requête POST est envoyée à la ressource (c'est-à-dire /modelnames/:id), votre serveur répond avec la dernière version mise à jour de modelInstace.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top