Frage

Wenn Sie $ save für eine ngResource aufrufen, ist es möglich zu POSTEN nur die bearbeiteten Felder, anstatt jedes Mal das gesamte Modell zu veröffentlichen?

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}
});
War es hilfreich?

Lösung

Nein, das ist nicht möglich, zumindest nicht auf Instanzen, siehe http://docs.angularjs.org/api/ngResource .$ressource

[...] Die Aktionsmethoden für das Klassenobjekt oder Instanzobjekt können wie folgt aufgerufen werden Rahmenbedingungen:

  • HTTP GET "Klassen" -Aktionen: Resource.action([parameters], [success], [error])
  • nicht-GET "Klassen" -Aktionen: Resource.action([parameters], postData, [success], [error])
  • nicht-GET-Instanz-Aktionen: instance.$action([parameters], [success], [error])

Es ist also nur möglich, die zu speichernden Daten an die "statische" Speichermethode zu übergeben, dh User.save.So etwas in der Art:

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

Ob das für Sie klappt, hängt wahrscheinlich davon ab, was Sie mit dem machen werden user Instanz.

Andere Tipps

Wenn ich nur ein Feld speichern möchte, verwende ich mit einem Rückruf, der die Antwort davon angibt, und aktualisiert das lokale Objekt auf den Erfolg:

generasacodicetagpre.

Dies setzt voraus, dass der Server, wenn ein Postantrag an die Ressource (dh .save()) gesendet wird, mit der neuesten aktualisierten Version des Modellinstocks antwortet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top