AngularJS $资源将id作为查询参数传递给url

时间:2014-10-19 15:04:57

标签: javascript angularjs angular-resource

我需要从其他API获取数据,其中产品ID是网址的一部分(而不是查询参数)。

工厂:

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

控制器:

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

我的网址构建如下:

/products?id=5426ced88b49d2e402402205

而不是:

/products/5426ced88b49d2e402402205

任何想法为什么?

1 个答案:

答案 0 :(得分:57)

当您在控制器中调用Products.get()时,您没有使用正确的参数名称(根据您对$resource的定义,您需要使用“productId”而不是“id”)。请尝试这样称呼它:

Products.get({ productId: id })

以下是documentation for $resource的摘录,解释了它的工作原理:

  

参数对象中的每个键值首先绑定到url模板(如果存在),然后在?之后将任何多余的键附加到url搜索查询。

在您的情况下,它没有在URL中找到“id”作为参数,因此它将其添加到查询字符串中。