2013-08-28 78 views
1

我已經與以下形式返回數據的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的爲真:我得到了以下錯誤:

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

如果我設置IsArray的假,我沒有犯錯或者,但我的對象也包含該請求的所有元DATAS ...

不知道我理解正確此$資源特徵

回答

3

由於$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 
    } 
}); 
+0

按照數組[官方文檔(http://docs.angularjs.org/api/ngResource/service/$resource) 。數據似乎代表http響應主體。 '轉換函數採用http響應正文和標題,並返回它的轉換(通常是反序列化)版本。 – xtang

0

您發送JSON數據不是數組,而meta屬性不是通過角框架創建的東西。如果您希望將其反序列化到objects陣列中,則必須僅返回該部分,並且isArray可以工作。

現在什麼@sza提到讓你重寫query並返回data.meta.objects