javascript - Angular $resource 在 transformResponse 之后访问元数据

标签 javascript angularjs

我有以下 API:

{
"meta": {
    "total_item": 1,
    "number_of_pages": 1,
    "page_number": 1,
    "status": "Success"
},
"data": [
    {
        "name": "Operator 1",
        "short_name": "OP1",
        "_id": "534d69bba758b3b7839ba7b9",
        "__v": 0,
        "users": [
            "532ef6e28b42970ab797444f"
        ]
    }
]
}

我正在使用 Angular $resource 通过以下代码查询 API:

var apiDataTransformer = function ($http) {
  return $http.defaults.transformResponse.concat([
    function (data, headersGetter) {
      var result = data.data;
      result.meta = data.meta;
      console.log(result);
      return result;
    }
  ])
};

angular.module('ua.common').factory('uaApi', function($resource, $http){
  var factory = {};
  factory.operator_ressource = $resource(
    '/operators/:operatorId',
    {},
    {'query': {method: 'GET', isArray: true, transformResponse: apiDataTransformer($http)       } }
  );
  return factory;
})

如果我在控制台中打印对这些资源的查询结果,我得到的是:

uaApi.operator_ressource.query({}, function(response){
  factory.operators_list = response;
  console.log(response);
});

// Console Output
[f, $promise: Object, $resolved: true]
0: f
    __v: 0
    _id: "534d69bba758b3b7839ba7b9"
    name: "Operator1"
    short_name: "OP1"
    users: Array[1]
        0: "532ef6e28b42970ab797444f"

所以使用 $resource,即使我使用 transformResponse 来保存我的数据,我也丢失了我的元对象,这很烦人,因为我希望能够在 page_number < number_of_pages 时自动获取其他对象。

我怎样才能用 Angular 实现这个? (我认为这是使用分页 api 的 Angular 应用程序的常见问题)。

最佳答案

您可以从查询方法返回一个包含边带分页数据和资源对象数组的对象,并在 transformResponse 中实例化它们。

类似的东西:

angular.module('ua.common').factory('uaApi', function($resource, $http){
    var factory = {};
    factory.operator_ressource = $resource('/operators/:operatorId', {},
        {'query':
            { method: 'GET',
              isArray: false,
              transformResponse: function(jsondata){
                  return { meta : jsondata.meta,
                           results : jsondata.map(function(result){
                                return new factory.operator_ressource(result);
                              })
                         }
              }
            }
         }
    );
    return factory;
});

这种方法对我很有效;我通常实例化一个寻呼机对象并返回一个 $resource 对象数组。

关于javascript - Angular $resource 在 transformResponse 之后访问元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23149618/

相关文章:

javascript - 确定 HighStock 图表中可用的趋势线类型

javascript - RequireJS 和 jQuery 插件

javascript - 动态添加新字段会重置先前字段中的值

javascript - jQuery 获取点击链接的 css 值或告诉点击了哪个链接

angularjs - 如何在 Angular JS 中访问指令参数?

javascript - Angular 中的动态更新无需使用 ng-repeat。可能的? (使用 Firebase)

javascript - 不使用 ID 和 FOR 并使用 angular.js 的自定义复选框/单选按钮

javascript - 子组件上的调用方法 - 组合 API

javascript - ng 表编号范围过滤器不起作用

javascript - 通过 AJAX 加载整个 AngularJS 页面