默认情况下,$resource.query()
设置为期望成为$resource
个对象的对象数组。为了以一种美好,安静的方式容纳分页,我设置了GET /api/widgets
端点以返回以下对象:
{
currentPage: 1,
perPage: 20,
totalItems: 10039,
items: [{...}, {...}, {...}]
}
有没有办法让它能让angular知道items
属性是$resource
个对象的项目数组?
答案 0 :(得分:23)
您需要指定自己的自定义操作。
我想你的代码看起来像这样:
factory('Widget', function($resource) {
return $resource('/api/widgets');
});
将其更改为:
factory('Widget', function($resource) {
return $resource(/api/widgets, null, {
query: {
method: 'GET',
isArray: true,
transformResponse: function(data) {
return angular.fromJson(data).items;
}
}
});
});
答案 1 :(得分:2)
简单就是使用$resouce.get
,如果你想使用查询,你可以覆盖那个行为。
$resource('/notes/:id', null,
{
'query': {method:'GET', isArray:false}
});
更多信息https://docs.angularjs.org/api/ngResource/service/ $ resource
答案 2 :(得分:0)
我遇到了同样的问题,我想提出一个可能会更好的解决方案:
factory('Widget', function($resource) {
return $resource(/api/widgets, null, {
query: {
interceptor: {
response: function(response) {
return response.data.items;
}
}
}
}
}
我认为它可能会更好,因为你正在重复使用标准的角度行为(实际上,比fromJson
稍微做一些)并截取输出结果来过滤你想要的。
答案 3 :(得分:0)
我使用此模式进行分页信息查询。
module.config(function($resourceProvider){
$resourceProvider.defaults.actions.query = {
method: 'GET',
interceptor: {
response: function(response) {
response.resource.$totalCount = response.data.totalCount;
response.resource.$limit = response.data.limit;
response.resource.$offset = response.data.offset;
return response.resource;
}
},
transformResponse: function(data, headers, status) {
var out = angular.fromJson(data);
out.data.totalCount = out.totalCount;
out.data.limit = out.limit;
out.data.offset = out.offset;
return out.data;
},
isArray: true
};
})