2015-01-16 7 views
6

Ho faticato a trovare un esempio coerente e valido di un'operazione di inserimento utilizzando la risorsa $ AngularJS. Un esempio di quando voglio aggiornare, ma non riesco a trovarlo si trova qui: AngularJS PUT on voting application to REST Service

Al centro, ho bisogno di capire la procedura migliore/normale per condurre un'operazione di put sia per le richieste di moduli o nel domanda di voto menzionata nel mio post sopra. Qualcuno ha un buon esempio che dimostra una put?

+1

non è chiaro quello che stai cercando. Se l'oggetto è nuovo (non ha id) il salvataggio sarà POST, se non è nuovo sarà messo PUT. Su quale parte stai cercando chiarimenti? – charlietfl

+0

Questo è il tipo di informazioni che sto cercando. I documenti Angular per $ risorse non sono in qualche modo chiari su come aggiornare un articolo con nuovi dati. Sto cercando esempi su come strutturare il servizio e il controller che supporta un'operazione put. La mia comprensione finora è che devo essere esplicito quando inserisco $ update nel controller e cerco il servizio (ad esempio 'update': {method: 'PATCH'}). Stai dicendo che non ho bisogno dell'aggiornamento $ e dovrei usare solo $ risparmi come per i dati iniziali? – Kode

risposta

14

Se si sta creando una nuova entità nel proprio archivio dati, si desidera utilizzare POST/salvare. Se si stanno aggiornando i dati associati a un'entità già esistente nel proprio archivio dati, si desidera utilizzare PUT/aggiornamento. La patch è solitamente riservata quando si desidera aggiornare solo un sottoinsieme dei dati dell'entità.

Guarda le RFC

Diverse applicazioni che si estendono Hypertext Transfer Protocol (HTTP) richiedono una funzione per fare modifica risorsa parziale. Il metodo PUT HTTP consente solo la sostituzione completa di un documento. Questa proposta aggiunge un nuovo metodo HTTP PATCH per modificare una risorsa HTTP esistente.

Fornire un ID con entrambe le operazioni PUT e PATCH. Non ne fornite uno con un'operazione POST.

Quando carichiamo le nostre forme angolari, di solito viene eseguito in due modi. Se il modulo viene caricato quando stiamo creando una nuova entità, non avremo un ID. Lo sapremo nel controller e chiameremo resource.save. Se forniamo il controller che carica il modulo con un ID utilizzato per estrarre i dati da un endpoint per compilare il modulo, ora abbiamo l'id che possiamo usare per eseguire le operazioni resource.update o resource.patch a seconda di quanto dell'entità stiamo aggiornando.

Ecco una funzione di esempio di salvataggio che gestisce sia le operazioni di aggiornamento che quelle di salvataggio. Qui controlliamo se un ID è stato fornito tramite il percorso prima di effettuare la chiamata alla risorsa.

angular.module('appModule').controller('ExampleCtrl', 
['$scope', '$routeParams', 
function($scope, $routeParams) { 

    $scope.saveForm = function() { 

     //Do input validation before you make a resource call 

     if ($routeParams.id) { 
      //call resource update since we have an id 
     } 
     else { 
      //call resource save since we don't have an id 
     } 
    }; 
}]); 

Ecco l'esempio dalla documentazione angularjs:

Come creare una richiesta PUT personalizzato:

var app = angular.module('app', ['ngResource', 'ngRoute']); 

// Some APIs expect a PUT request in the format URL/object/ID 
// Here we are creating an 'update' method 
app.factory('Notes', ['$resource', function($resource) { 
return $resource('/notes/:id', null, 
{ 
    'update': { method:'PUT' } 
}); 
}]); 

// In our controller we get the ID from the URL using ngRoute and $routeParams 
// We pass in $routeParams and our Notes factory along with $scope 
app.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes', 
           function($scope, $routeParams, Notes) { 
// First get a note object from the factory 
var note = Notes.get({ id:$routeParams.id }); 
$id = note.id; 

// Now call update passing in the ID first then the object you are updating 
Notes.update({ id:$id }, note); 

// This will PUT /notes/ID with the note object in the request payload 
}]); 
+0

Così triste che non puoi semplicemente impostare la funzione predefinita $ update() per usare PUT, perché allora potresti semplicemente eseguire 'object. $ Save()' e Angular decide automaticamente se eseguire '$ update' o $ create 'basato sul fatto che abbia un ID, ma poi va e usa POST – darkbluesun

Problemi correlati