2013-10-22 11 views
21

Supponiamo che io sono una risorsa impostato in questo modo:Come faccio a non inviare i parametri del modello di url con il corpo della richiesta in angolare?

resource = $resource(
    "http://foo.com/service/:type/:id", 
    {}, 
    {save: {method:'PUT', params: {type:'@type', id: '@id'}}} 
); 
resource.save({type:'user', id:14, name:'Bob Dole'}); 

C'è un modo posso impedire type e id di essere presentato come parte del corpo della richiesta, e basta inviare name nel payload PUT? Non controllo l'API a cui mi sto sottoponendo e sembra che non mi piacciano i parametri extra che sto inviando.

Grazie!

Aggiornamento - 10/25/13 - 13:38

La documentazione per resource dice questo:

Se il valore del parametro è preceduto da @ allora il valore di quel parametro viene estratto dall'oggetto dati (utile per operazioni non GET).

Questo implica che questo dovrebbe per rimuovere i parametri sulla base dei dati:

resource.save({type:'@user', id:'@14', name:'Bob Dole'}); 

ma non sembra funzionare. Ancora in perdita.

+0

Questa è una grande ipotesi; ma quando si usa $ HTTP; è possibile aggiungere una funzione di trasformazione per modificare la richiesta. Puoi fare la stessa cosa con $ resource? – JeffryHouser

+0

Grazie - funziona! Vedi sopra per la mia soluzione. Tuttavia, i documenti menzionano un modo più semplice che dovrebbe funzionare, ma non lo fa. –

+0

Dovresti pubblicare la tua soluzione come risposta formale [AKA Rispondi alla tua domanda]. Aiuterà le persone che troveranno in futuro. – JeffryHouser

risposta

7

FWIW, ho trovato una soluzione, grazie a @ Reboog711, includendo un parametro transformRequest in questo modo:

resource = $resource(
    "http://foo.com/service/:type/:id", 
    {}, 
    {save: { 
     method:'PUT', 
     transformRequest:function(data) { 
      delete data.type; 
      delete data.id; 
      return JSON.stringify(data); 
     }, 
     params: {type:'@type', id: '@id'} 
    }} 
); 
32

Utilizzare il primo parametro per i parametri modello URL e mettete i vostri dati di post nel secondo parametro in questo modo:

resource.save({id:14, type:'user'}, {name:'Bob Dole'}); 

Ecco la linea dal Angular docs che mostra la firma di funzione:

"classe" non-GET ac zioni: Resource.action ([parametri], PostData, [il successo], [errore])

Ecco un esempio in plunker

La richiesta si ottiene non ha i parametri URL nel corpo:

Request URL:http://run.plnkr.co/JAOqZqW6RSywatUM/badUrl/user/14 
Request Method:PUT 
Request Payloadview source 
{name:Bob Dole} 
+4

Questa è la risposta corretta. – marapet

Problemi correlati