2014-09-15 8 views
5

Ich bin ein Anfänger mit AngularJS, und kann nicht meinen Fehler in diesem CodeAngularJS Ressource URL

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

Erwartete URL finden: .../cars/abc

Die genannte URL lautet: .../cars?id=abc

Ich benutze angularjs v1.2.24

Kann mir jemand helfen? Dank

+2

Kann dies http://stackoverflow.com/questions/16677487/angularjs-resource-builds-wrong-resource-url – Yalamber

Antwort

5

Wie in der Dokumentation $resourceparamDefaultserklärt:

Bei einem Template/path /: Verb und Parameter {Verb: 'begrüßt', Anrede: 'Hallo'} Ergebnisse in URL/Pfad/Begrüßung? Begrüßung = Hallo.

Wenn der Parameterwert mit @ dann der Wert für diesen Parameter vorangestellt wird, wird von der entsprechenden Eigenschaft auf dem Objekt Daten extrahiert werden (vorausgesetzt, wenn eine Aktion Methode aufrufen). Zum Beispiel, wenn das defaultParam Objekt ist {someParam: ‚@someProp‘} dann wird der Wert von someParam wird data.someProp

sein Dies deutet darauf hin, dass jedes Verb in der parameterizd URL definiert, dass die Schlüssel übereinstimmt definiert in Die $resource 's Parameter Standardwerte oder die $resource Klassenmethoden (get, save, etc ..) Parameter haben den entsprechenden Wert dieses Schlüssels ersetzen das Verb in der URL. Die ‚@‘ Notation auf der anderen Seite, war nicht richtig in diesem Zusammenhang erklärt, sollte es gewesen:

Wenn der Parameterwert mit @ dann dem Wert für diese Parameter vorangestellt wird, wird aus dem entsprechenden extrahiert werden Eigenschaft auf dem Datenobjekt (wird beim Aufruf einer Instanz Aktionsmethode bereitgestellt).

Instanz Aktionsmethoden ($ erhalten, $ sparen, $ löschen, etc ..), sind Methoden, die für Daten verwendet werden Objekte abgerufen wird $resource Klasse Aktionsmethoden. Diese sind normalerweise hilfreich, wenn Sie Anfragen mit denselben Ressourcen verketten.

EXAMPLE DEMO

Lassen Sie uns annehmen, dass Ihr cars/abc eine Antwort json von zurückgibt:

{ 
    "id": "abc" 
} 

die Kommentare Lesen Sie die Antworten der einzelnen Aktionsmethodenaufruf zeigt.

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

oben Von @Yalamber Kommentar/link helfen kann, eine weitere Option ist folgendes zu tun : 'myCarResource.get ({}, {id: 'abc'}); 'Nach meinem begrenzten Verständnis glaube ich, dass das erste Objekt direkt mit dem URL-Muster verbunden ist und daher mit den Namen des: param in der URL übereinstimmen muss (in diesem Fall) Fall, carId). Das zweite Objekt ist das Objekt, das verwendet wird, wenn Sie "@id" verwenden und die ID des zweiten Objekts ziehen und sie an folgende Adresse anpassen: carId –