1

我有一个 API,它返回以下形式的数据(使用tastepie):

{"meta":{
     "limit": 20, 
     "next": null, 
     "offset": 0, 
     "previous": null, 
     "total_count": 4}, 
     "objects": [
          {
           "id": 1, 
           "name": "name1", 
           "resource_uri": "/api/v1/operator/1", 
           "short_name": "NA1"
          },
          {
           "id": 2, 
           "name": "name2", 
           "resource_uri": "/api/v1/operator/2", 
           "short_name": "NA2"
          }, 
          ...
    ]
}

所以我认为要让我的资源正常工作,我应该使用:

var Operator = $resource('http://127.0.0.1:8080\:8080/api/v1/operator/:operatorId',
    {operatorId:'@id'},
    {
        query: {
            method: 'GET',
            transformResponse: function (data) {
                console.log(JSON.parse(data).objects)
                return JSON.parse(data).objects;
            },
            isArray: true
        }
    });

但是当我将 isArray 设置为 true 时:我收到以下错误:

TypeError: Object #<g> has no method 'push'

如果我将 isArray 设置为 false,我没有错误,但我的对象还包含此请求的所有元数据...

不确定我是否正确理解了这个 $resource 功能

4

2 回答 2

4

由于$resource自动将 JSON 字符串转换为对象,因此您不必调用JSON.parse()

做就是了

var Operator = $resource('http://127.0.0.1:8080\:8080/api/v1/operator/:operatorId', {
    operatorId: '@id'
}, {
    query: {
        method: 'GET',
        transformResponse: function (data) {
            return data.meta.objects;
        },
        isArray: true
    }
});
于 2013-08-28T20:56:31.477 回答
0

您发送的 json 数据不是数组,meta属性也不是由 Angular 框架创建的。如果您期望它被反序列化到objects数组中,您必须只返回该部分并且isArray可以工作。

现在@sza 提到要获取您覆盖query并返回的数组data.meta.objects

于 2013-08-29T02:58:45.340 回答