2014-10-19 5 views
29

Ich muss Daten aus einem Rest API abrufen, mit der Produkt-ID Teil der URL (und nicht als Abfrageparameter).

Die Fabrik:

.factory('Products', ['$resource', 
    function($resource) { 
     return $resource('products/:productId', { 
      productId: '@id' 
     }, { 
      query: { 
       isArray: false 
      }, 
      update: { 
       method: 'PUT' 
      } 
     }); 
    } 
]) 

Der Controller:

$scope.getProduct = function(id, from) { 
    $scope.product = Products.get({ id: id }, function(){ 
     console.log($scope.product); 
    }); 
} 

Meine url ist so aufgebaut, wie:

/products?id=5426ced88b49d2e402402205 

statt:

/products/5426ced88b49d2e402402205 

Irgendwelche Ideen warum?

Antwort

54

Wenn Sie Products.get() in der Steuerung aufrufen, verwenden Sie nicht den richtigen Parameternamen (Sie müssen auf der Grundlage Ihrer Definition des $resource „productId“ anstelle von „id“ verwenden). Versuchen Sie es wie folgt statt Aufruf:

Products.get({ productId: id }) 

Hier ein Ausschnitt aus dem documentation for $resource ist, die erklärt, wie es funktioniert:

Jeder Schlüsselwert in dem Parameter Objekt zuerst an URL-Vorlage gebunden ist, falls vorhanden, und dann Überschüssige Schlüssel werden nach dem? an die URL-Suchabfrage angehängt.

In Ihrem Fall wird "ID" nicht als Parameter in der URL gefunden, daher wird diese zur Abfragezeichenfolge hinzugefügt.

+1

Vielen Dank, das war es! :) – orszaczky

+6

Also was ist der Zweck des '@' Präfixes dann? "Wenn dem Parameterwert das Präfix @ vorangestellt ist, wird der Wert für diesen Parameter aus der entsprechenden Eigenschaft des Objekts' data' extrahiert (vorausgesetzt, dass eine action-Methode aufgerufen wird). Wenn das 'defaultParam'-Objekt beispielsweise' {someParam : '@someProp'} 'dann ist der Wert von' someParam' 'data.someProp'." Klingt so, als ob Sie in der Lage sein sollten, einen 'id'-Wert zu übergeben, und die Ressource würde es benutzen, um den' productId'-Parameter zu füllen. Aber das ist nicht der Fall. –

+0

Danke! Hat mir heute geholfen! –

Verwandte Themen