2013-03-01 9 views
22

ho bisogno di inviare un corpo di richiesta con le mie richieste eliminare utilizzando $resourceChe cos'è un modo pulito per inviare un corpo con la richiesta DELETE?

L'unico modo ho potuto vedere per fare questo è stato quello di cambiare:

https://github.com/angular/angular.js/blob/master/src/ngResource/resource.js

Da

var hasBody = action.method == 'POST' || action.method == 'PUT' || action.method == 'PATCH'; 

a

var hasBody = action.method == 'POST' || action.method == 'PUT' || action.method == 'PATCH' || action.method == 'DELETE'; 

C'è un modo migliore per ignorare questo? Come quando si modifica l'intestazione del tipo di contenuto che si può fare:

$httpProvider.defaults.headers["delete"] = {'Content-Type': 'application/json;charset=utf-8'}; 

o qualcosa di simile ... Ive googled questo, ma forse Ive perso qualcosa di ovvio (non per la prima volta). Grazie per l'aiuto in anticipo.

+0

vorrei sottolineare. DELETE dovrebbe eliminare la risorsa identificata dall'URL. Quindi non dovresti inviare dati nel corpo. –

+0

Im determinato corpo è consentito su DELETE – paullth

+0

+1, stavo per pubblicare la stessa domanda esatta. @SubirKumarSao, sto volendo inviare un corpo di richiesta con il mio DELETE per l'eliminazione di più risorse (le risorse da eliminare è ciò che è nel corpo della richiesta). C'è un modo più RESTful per fare questo? – dnc253

risposta

2

È possibile iniettare componente $http (http://docs.angularjs.org/api/ng.%24http#Usage) in uno dei uno dei controller e usandolo come segue:

$http({method: 'DELETE', url: 'www.url.com', headers: {'X-MY-HEADER': 'MY_VALUE'}}); 

Spero che questo quello che ti aspettavi.

+0

Sto cercando di fare questo con Angular Resource http://docs.angularjs.org/api/ngResource.$resource, non lo abbiamo chiarito nella domanda, mi dispiace – paullth

+0

Ok. Penso che la risorsa $ non sia stata creata per questo tipo di trattamento, apparentemente è pensata per essere utilizzata in un contesto di associazione dei dati. Per una specifica richiesta specifica, suppongo che $ http debba essere utilizzato direttamente. –

+0

Da quello che sto leggendo, è considerato una cattiva pratica aggiungere il prefisso "X" se questa è un'intestazione personalizzata. Preferirei comunque inviare contenuti con l'eliminazione piuttosto che un'intestazione personalizzata. – rgbrgb

24

Questo funziona.

$scope.delete = function(object) { 
    $http({ 
     url: 'domain/resource', 
     method: 'DELETE', 
     data: { 
      id: object.id 
     }, 
     headers: { 
      "Content-Type": "application/json;charset=utf-8" 
     } 
    }).then(function(res) { 
     console.log(res.data); 
    }, function(error) { 
     console.log(error); 
    }); 
}; 
+0

no. Questo no. Come '$ http.delete ('dominio/risorsa', {id: oggetto.id});' – Martin

+1

ok, ho modificato la tua risposta, dovresti aggiungere l'intestazione corretta. Ora funziona :) – Martin

+0

Hell yeah !!!! Questa soluzione ha funzionato per me !!!!! – davidrl1000

Problemi correlati