我正在使用angularjs 1.6,并尝试使用此格式创建网址
http://localhost:49524//api/products/GDN
其中GDN是我想指定的参数。
我使用$resource
设置为:
$resource(appSettings.serverPath + "/api/products/:id", { id: '@id' });
我的控制器包含:
productResource.query({id: vm.searchCriteria}, (data)=> {
vm.products = data;
});
我已尝试将ID重命名为' search'。但是,当我这样做时,生成的网址变为:
http://localhost:49524//api/products?search=GDN
有人可以建议我错过了吗?谢谢!
答案 0 :(得分:1)
为什么
search
被添加为查询字符串?
http://localhost:49524//api/products?search=GDN
^^^^^^^^^^
来自文档angular#resource
参数对象中的每个键值首先绑定到url模板(如果存在),然后在?之后将任何多余的键附加到url搜索查询。
在productResource.query
中,search
就在那里。但是这个参数未在resource
定义中定义。
您还必须在angular#resource定义中重命名它。
$resource(appSettings.serverPath + "/api/products/:search", { search: '@id' });
^^^^^^^ ^^^^^^^
控制器:
productResource.query({search: vm.searchCriteria}, (data)=> {
^^^^^^
vm.products = data;
});
如果您不在资源定义中重命名它,它将添加为查询字符串
编辑:
$resource(appSettings.serverPath + "/api/products/:search", { search: '@id' });
^^^^^^ ^^^^^^
答案 1 :(得分:0)
感谢您对Ritchie的评论。但是,这里有一个说明问题的插件
http://plnkr.co/edit/aQGMCHEa5EUvzhpDryio?p=preview
如果我按照您的建议更改代码:
return $resource('/api/~:username/article/:id', {
search: '@id',
username: Authorization.currentUser
})
和
ctrl.testResource = function() {
Article.get({search: 5});
};