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