使用$ resource.query,我想返回一个包含实际资源数组的对象

w.b*_*ian 11 angularjs angular-resource

默认情况下,$resource.query()设置为期望成为$resource对象的对象数组.为了以一种漂亮,安静的方式适应分页,我将GET /api/widgets端点设置为返回以下对象:

{
  currentPage: 1,
  perPage: 20,
  totalItems: 10039,
  items: [{...}, {...}, {...}]
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使它成为angular将知道items属性是作为$resource对象的项目数组?

Rem*_*ing 23

您需要指定自己的自定义操作.

我想你的代码看起来像这样:

factory('Widget', function($resource) {
  return $resource('/api/widgets');
});
Run Code Online (Sandbox Code Playgroud)

把它改成这个:

factory('Widget', function($resource) {
  return $resource(/api/widgets, null, {
    query: {
      method: 'GET',
      isArray: true,
      transformResponse: function(data) {
        return angular.fromJson(data).items;
      }
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

  • 所以我做了,设置`isArray:false`并保持返回对象的形状.我遍历了`items in items`并将它们替换为:`data.items [i] = new Widget(item);`它很棒!我真的很感谢你的帮助. (5认同)