如何将数组参数传递给AngularJS$resource



当我将数组传递给资源操作时。。它不会将数组参数转换为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

有人知道如何绕过这个问题吗?

您可以使用$resource传递数组

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

然后你得到请求url

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

你得到的是%5B%5D而不是[]

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

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

参数应该像这个一样声明

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

然而,我不确定你想要实现什么样的url。由于参数重复,任何以OP方式发布的都是无效请求。

要坚持GET谓词并在查询params中定义数组,我认为唯一的方法是:将param构造为字符串

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

PS除非您有充分的理由,否则最好的方法是使用POST谓词发送数组,如本文所述。使用通过URL发送的数组,您可以很容易地用完最大URL长度

最新更新