我有一个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,我没有错误,但我的对象也包含此请求的所有元数据...
我不确定我是否正确理解了此$资源功能
答案 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