查询有关$ resource和查询参数的信息

时间:2017-04-08 12:09:14

标签: angularjs

我正在使用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

有人可以建议我错过了吗?谢谢!

2 个答案:

答案 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});
};

然后网址变为:     http://run.plnkr.co/api/~dave/article?search=5