web-dev-qa-db-fra.com

AngularJS $ resource passe id comme paramètre de requête à la place dans l'url

J'ai besoin d'obtenir des données à partir d'une API de repos, avec la partie id du produit de l'URL (et non comme paramètre de requête).

L'usine:

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

Le controlle:

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

Mon URL est construite comme:

/products?id=5426ced88b49d2e402402205

au lieu de:

/products/5426ced88b49d2e402402205

Des idées pourquoi?

30
orszaczky

Lorsque vous appelez Products.get() dans le contrôleur, vous n'utilisez pas le nom de paramètre correct (vous devez utiliser "productId" au lieu de "id" en fonction de votre définition du $resource). Essayez plutôt de l'appeler ainsi:

Products.get({ productId: id })

Voici un extrait de la documentation pour $resource qui explique comment cela fonctionne:

Chaque valeur de clé dans l'objet paramètre est d'abord liée au modèle d'URL s'il est présent, puis toute clé en excès est ajoutée à la requête de recherche d'URL après le?.

Dans votre cas, il ne trouve pas "id" comme paramètre dans l'URL, il ajoute donc cela à la chaîne de requête.

57
Sunil D.