2014-10-19 10 views
29

Potrzebuję pobrać dane z reszta API, z identyfikatorem produktu częścią adresu URL (a nie jako parametrem zapytania).

Fabryka:

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

Kontroler:

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

mój adres URL jest skonstruowany tak:

/products?id=5426ced88b49d2e402402205 

zamiast:

/products/5426ced88b49d2e402402205 

Jakieś pomysły, dlaczego?

Odpowiedz

54

Po wywołaniu Products.get() w kontrolerze, nie używasz poprawnej nazwy parametru (musisz użyć "productId" zamiast "id" w oparciu o twoją definicję $resource). Spróbuj zadzwonić to tak zamiast:

Products.get({ productId: id }) 

Oto urywek z documentation for $resource która wyjaśnia, jak to działa:

Każdy klucz wartość w obiekcie parametru jest najpierw związany url szablonu, jeśli obecny, a następnie wszystkie klucze przekroczenia są dołączane do zapytania wyszukiwania adresu URL po znaku?.

W twoim przypadku nie znajduje "id" jako parametru w adresie URL, więc dodaje go do ciągu zapytania.

+1

Wielkie dzięki, to było to! :) – orszaczky

+6

Jaki jest więc cel wartości "@" z prefiksem? "Jeśli wartość parametru jest poprzedzona prefiksem @, wówczas wartość tego parametru zostanie wyodrębniona z odpowiedniej właściwości obiektu' data' (podanego podczas wywoływania metody akcji) .Na przykład, jeśli obiektem 'defaultParam' jest' {someParam : '@someProp'} ', wtedy wartość' someParam' będzie miała postać 'data.someProp'." Wygląda na to, że powinieneś być w stanie przekazać wartość 'id', a zasób użyje jej do zapełnienia paramu' productId'. Ale tak nie jest. –

+0

Dziękujemy! Pomógł mi dzisiaj! –

Powiązane problemy