2014-09-15 18 views
5

io sono un principiante con AngularJS, e non riesce a trovare il mio errore in questo codiceAngularjs Resource URL

var myCarResource = $resource('cars/:carId', 
     { 
      carId:'@id' 
     }); 
    var car = myCarResource.get({id:'abc'}); 

URL previsto: .../cars/abc

La chiamata URL è: .../cars?id=abc

Sto usando angularjs v1.2.24

Qualcuno può aiutarmi? Grazie

+2

Può essere questo può aiutare http://stackoverflow.com/questions/16677487/angularjs-resource-builds-wrong-resource-url – Yalamber

risposta

5

Come indicato nella documentazione $resourceparamDefaults:

Dato un modello/percorso /: verbo e il parametro {verbo: 'salutare', saluto: 'Ciao'} risultati in URL/percorso/salutare? saluto = Ciao.

Se il valore del parametro è preceduto @ allora il valore di tale parametro sarà estratta dalla proprietà corrispondente dell'oggetto dati (disponibile quando si chiama un metodo action). Ad esempio, se l'oggetto defaultParam è {someParam: '@someProp'} allora il valore di someParam sarà data.someProp

Questo suggerisce che ogni verbo definito nell'URL parameterizd che corrisponde ai tasti definiti in i parametri predefiniti del parametro $resource oi metodi della classe $resource (get, save, ecc.) avranno il valore corrispondente di tale chiave sostituire il verbo nell'URL. La notazione '@' altro canto, non è stato spiegato correttamente in questo contesto, dovrebbe essere:

Se il valore del parametro è preceduto @ allora il valore per quel parametro saranno estratti dai corrispondenti proprietà sull'oggetto dati (fornito quando si chiama un metodo di azione di istanza).

metodi d'azione grado ($ ottengono, $ risparmiare, $ cancellare, ecc ..), sono metodi che vengono utilizzati per i dati oggetti recuperati utilizzando $resource metodi di azione di classe. Di solito sono utili quando si concatenano richieste con le stesse risorse.

EXAMPLE DEMO

Supponiamo che il vostro cars/abc restituisce un JSON risposta:

{ 
    "id": "abc" 
} 

Leggere i commenti che mostrano le risposte di ciascun metodo di azione invocazione.

var myCarResource = $resource('cars/:carId', 
{ 
    carId:'@id' 
}); 


// This sends a GET request '/cars/?id=abc 
myCarResource.get({id:'abc'}); 

// This sends a GET request '/cars/abc' 
myCarResource.get({carId:'abc'}); // returns {"id": "abc"} 

myCarResource.get({carId:'abc'}).$promise.then(function(car) { 

    // sends a POST request '/cars/abc', it replaces the :carId verb from the 
    // @id notation you have defined in the parameter default. It also sends, 
    // other parameter defaults defined with '@' that are defined as verbs in the url. 
    car.$save(); 

}); 
+0

Da @Yalamber commento/link qui sopra, un'altra opzione è quella di fare quanto segue : 'myCarResource.get ({}, {id: 'abc'}); 'Dalla mia comprensione limitata, credo che il primo oggetto sia direttamente correlato al pattern URL, e quindi deve corrispondere ai nomi di: param nell'URL (in questo caso, carId). Il secondo oggetto è quello che viene utilizzato quando si usa '@id' e si estrae l'ID del secondo oggetto e lo si abbina a: carId –

Problemi correlati