$ resource并获取数组

时间:2013-08-28 20:48:26

标签: angularjs angular-resource

我有一个API,它使用以下格式返回数据(使用tastypie):

{"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,我没有错误,但我的对象也包含此请求的所有元数据...

我不确定我是否正确理解了此$资源功能

2 个答案:

答案 0 :(得分:4)

由于$resource会自动将JSON字符串转换为object,因此您无需调用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
    }
});

答案 1 :(得分:0)

您发送的json数据不是数组,meta属性不是由angular framework创建的。如果您希望将其反序列化到objects数组中,则必须仅返回该部分,isArray将起作用。

现在@sza提到要覆盖query并返回data.meta.objects

的数组