我不太了解如何正确使用AngularJS的$资源。例如,我有一个REST API,它返回这样的数据:
{
"status": "success",
"data": {
"expand": "schema,names",
"startAt": 0,
"maxResults": 10,
"total": 38,
"issues": [{ ... }, { ... }, {...}, ...]
}
}
现在我想弄清楚的是AngularJS如何使用$ resource将data.issues中的每个对象作为资源返回(所以在这种情况下,获取10个资源的数组/集合)但是它确实如此看起来我不能用AngularJS的$资源从我在其上找到的有限资源中做到这一点,或者我可以吗?
答案 0 :(得分:6)
$ resource期待经典" RESTful" API源码。这意味着你有一个端点,其中GET,PUT,POST,DELETE方法都会影响给定的资源类型,这些消息的主体只包含资源,而不是资源和一堆元数据。
对于您尝试做的事情,如果这是您坚持使用的API,那么您可能不得不使用$ http来推广自己的API,因为它看起来像它回应的JSON包含了一堆资源,而且资源不会关心。
唯一的另一种选择是编写某种类型的httpInterceptor,它可以将您从Web服务中获取的内容翻译成$ resource可以更无缝地处理的内容。
虽然从语义上讲,你的网络服务可能通常都是“RESTful”,但在目前的经典标准中,它并不是RESTful。
有关REST here
的更多信息编辑:除了上述信息之外,如果没有看到您的网络API的签名或知道您尝试做什么,将很难更详细地回答您的问题。
答案 1 :(得分: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
});
答案 2 :(得分:1)
查看代码,blesh是正确的,所以我所做的是修改基本的$ resource代码,以便支持自定义编码器/解码器,使得$ resource能够使用任何可能具有的REST API定制格式。对angularjs跳跃提出拉动请求,他们将包含它,所以我不需要使用这个单独的叉子:https://github.com/angular/angular.js/pull/1514