Javascript AngularJS$resource在url中将id作为查询参数传递
我需要从RESTAPI获取数据,并将产品id作为url的一部分(而不是作为查询参数) 工厂:Javascript AngularJS$resource在url中将id作为查询参数传递,javascript,angularjs,angular-resource,Javascript,Angularjs,Angular Resource,我需要从RESTAPI获取数据,并将产品id作为url的一部分(而不是作为查询参数) 工厂: .factory('Products', ['$resource', function($resource) { return $resource('products/:productId', { productId: '@id' }, { query: { isArray: fals
.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);
});
}
我的url的结构如下:
/products?id=5426ced88b49d2e402402205
而不是:
/products/5426ced88b49d2e402402205
你知道为什么吗?当你在控制器中调用
Products.get()
时,你没有使用正确的参数名(根据$resource
的定义,你需要使用“productId”而不是“id”)。试着这样称呼它:
Products.get({ productId: id })
以下是中的一个片段,解释了它的工作原理:
参数对象中的每个键值首先绑定到url模板(如果存在),然后将任何多余的键值附加到url搜索查询的?之后
在您的例子中,它在URL中找不到“id”作为参数,因此它将其添加到查询字符串中。非常感谢,就是这样!:)那么,
@
前缀值的用途是什么呢?“如果参数值以@作为前缀,则该参数的值将从数据
对象上的相应属性中提取(在调用操作方法时提供)。例如,如果defaultParam
对象是{someParam:'@someProp'}”
那么someParam
的值将是数据。someProp
“听起来您应该能够传入id
值,资源将使用它填充productId
参数。但事实并非如此,谢谢!今天帮了我@Erik J这有点晚了,但我认为@prefixed值只有在使用$resource
实例时才有用,而不是使用resource类本身。资源的类方法(例如:Products.get(productId:xx)
)没有从中提取ID的对象。但是,如果您有一个产品资源的实例,它将从对象中提取@value并将其插入URL(例如:myProductResource.save()将发布到/products/:productId)