了解 AngularJS 的 $resource
Posted
技术标签:
【中文标题】了解 AngularJS 的 $resource【英文标题】:Understanding AngularJS's $resource 【发布时间】:2012-10-20 06:27:50 【问题描述】:我不太明白如何正确使用 AngularJS 的 $resource。例如,我有一个 REST API,它返回如下数据:
"status": "success",
"data":
"expand": "schema,names",
"startAt": 0,
"maxResults": 10,
"total": 38,
"issues": [ ... , ... , ..., ...]
现在我想弄清楚的是如何在 AngularJS 中使用 $resource,其中 data.issues 中的每个对象都作为资源返回(因此在这种情况下,获取 10 个资源的数组/集合)但是它确实似乎我不能从我在其上找到的有限资源中使用 AngularJS 的 $resource 来做到这一点,或者我可以吗?
【问题讨论】:
【参考方案1】:$resource 需要一个经典的“RESTful”API 源。这意味着您将拥有一个端点,其中 GET、PUT、POST、DELETE 方法都会影响给定的资源类型,并且这些消息的正文将只包含资源,而不是资源和一堆元数据。
对于您正在尝试做的事情,如果这是您坚持使用的 API,您可能必须使用 $http 来推出自己的 API,因为它响应的 JSON 看起来包含一堆$resource 不会关心的元数据。
唯一的其他选择是编写某种 httpInterceptor,它将您从 Web 服务返回的内容转换为 $resource 可以更无缝地处理的内容。
虽然从语义上讲,您的 Web 服务可能通常是“RESTful”,但在当前的经典标准中它不是 RESTful。
更多关于 REST 的信息here
编辑:在上述信息之外,如果没有看到您的 Web API 的签名或不知道您要做什么,就很难更详细地回答您的问题。
【讨论】:
【参考方案2】:使用较新版本的 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
);
【讨论】:
【参考方案3】:查看代码,blesh 是正确的,所以我所做的是修改基本 $resource 代码以支持自定义编码器/解码器,以使 $resource 能够与任何可能具有自定义格式。向 angularjs hopping 提出了拉取请求,他们将包含它,所以我不必维护这个单独的分叉:https://github.com/angular/angular.js/pull/1514
【讨论】:
以上是关于了解 AngularJS 的 $resource的主要内容,如果未能解决你的问题,请参考以下文章