2012-10-30 39 views
2

我不完全得到如何正確使用AngularJS的$資源。例如,我有一個REST API是這樣的返回數據:

{ 
    "status": "success", 
    "data": { 
     "expand": "schema,names", 
     "startAt": 0, 
     "maxResults": 10, 
     "total": 38, 
     "issues": [{ ... }, { ... }, {...}, ...] 
    } 
} 

現在什麼,我想弄清楚的是如何在AngularJS使用其中data.issues每個對象返回爲一個在$資源資源(所以在這種情況下,得到的10個資源陣列/集),但它並沒有真正好像我可以做到這一點從有限的資源AngularJS的$資源我已經找到它,或者可以嗎?

回答

6

$資源期待一個經典的「REST風格的」 API源。這意味着你有一個端點,其中GET,PUT,POST,DELETE方法都會影響一個給定的資源類型,以及這些消息的機構將只包括資源,而不是資源和一堆的元數據。

對於你要做的事情,如果這是你堅持使用的API,你可能將不得不使用$ http來滾動你自己,因爲它看起來像它正在響應的JSON包含一個$資源不會關心的一堆元數據。

唯一的其他選擇是寫某種httpInterceptor的,將翻譯你在說什麼從Web服務作爲回東西$資源可以處理更多一點的無縫連接。

雖然,語義,Web服務可能是一般「REST風格」,這不是在那意味着什麼目前經典標準的RESTful。 here


編輯對REST

更多信息:上述信息外,沒有看到您的Web API的簽名或知道你想要做什麼,這將是很難回答你的問題更詳細地說。

1

看代碼,blesh是正確的所以我所做的是改變基部$資源代碼,以支持自定義編碼器/解碼器,使任何有$資源可以使用任何REST API,可能有工作一種定製的格式。向angularjs跳轉提出了一個pull請求,他們將包括它,所以我不必在這個單獨的分支中:https://github.com/angular/angular.js/pull/1514

3

使用更新版本的angular,可以提供對將繞過外部包裝的資源操作的回調。

$resource('', {}, { 
    query: { 
     method: 'GET', 
     isArray: true, 
     transformResponse: function(response) { 
      return JSON.parse(response).data.issues; 
     } 
    } 
}); 
在資源回調函數

然後

Issue.query({ 
    //query params 
}, function(issues) { 
    //issues will be an array of your issues that you can process 
    //or just add to the scope to be iterated over    
});