2012-10-30 41 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    
});