如何将数组参数传递给AngularJS $资源

时间:2015-04-01 10:24:18

标签: angularjs

当我将数组传递给资源操作时...它不会将数组参数转换为URL参数数组

var Product = $resource('path/products');
Product.query({ids: [1,2,3]})

而不是得到:

path/products?ids[]=1&ids[]=2ids[]=3

我得到了:

path/products?ids=1&ids=2ids=3

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:22)

您可以使用$ resource传递数组

var searchRequest = $resource('/api/search/post', {}, {
    'get': {method: 'GET'}
});
searchRequest.get({'ids[]':[1,2,3]});

然后你得到请求网址

/api/search/post?ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=3

您获得%5B%5D而不是[]

如果您希望返回array而不是object,那么您应该使用

'get': {method: 'GET', isArray: true}

答案 1 :(得分:-1)

Params应该像这样声明

var Product = $resource('path/products?:ids',
{ids: '@ids'});

但是我不确定你想要实现的结果是什么。由于重复参数,OP方式中发布的任何一个都是无效请求。

坚持使用GET动词并在查询参数中定义一个数组我看到了唯一的方法:将param构造为一个字符串

var query = [1,2,3].map(function(el){return 'brand[]='+el}).join('&');
Product.query({ids: query});

PS 除非你有充分的理由,否则最好的方法是使用POST动词发送数组,如this post中所述。通过URL发送数组,您可以轻松地耗尽最大URL长度