Pubblicare solo campi modificati su $ Salva di una risorsa $
-
12-12-2019 - |
Domanda
Quando si chiama $ Salva su un ngresource, è possibile postare solo i campi modificati piuttosto che pubblicare l'intero modello ogni volta?
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}
});
. Soluzione
No, non è possibile, almeno non su istanze, vedere http:// docs.angolarjs.org/api/ngresource.$resource
.[...] I metodi di azione sull'oggetto di classe o l'oggetto istanza possono essere richiamati con quanto segue Parametri:
.
- http Ottieni azioni "Classe":
Resource.action([parameters], [success], [error])
- Azioni "Classe" non get:
Resource.action([parameters], postData, [success], [error])
- Azioni di istanza non rettifica:
instance.$action([parameters], [success], [error])
Allora, è possibile passare solo i dati da salvare nel metodo di salvataggio "statico", ovvero User.save
.Qualcosa del genere:
User.get(function(user)
{
user.name = 'John Smith';
User.save({name: user.name});
});
.
Se questo funziona per voi probabilmente dipenderai da ciò che farete con l'istanza user
.
Altri suggerimenti
Quando voglio salvare un solo campo, uso il metodo .save()
statico, con un callback che prende la risposta da quella e aggiorna l'oggetto locale sul successo:
$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;
});
};
.
Si presuppone che quando una richiesta di post viene inviata alla risorsa (IE, /modelnames/:id
), il server risponde con la versione aggiornata più recente di ModelInStace.