3

我不太明白如何正确使用 AngularJS 的 $resource。例如,我有一个 REST API,它返回如下数据:

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

现在我想弄清楚的是如何在 AngularJS 中使用 $resource,其中 data.issues 中的每个对象都作为资源返回(因此在这种情况下,获取 10 个资源的数组/集合)但它看起来并不真正就像我可以从我找到的有限资源中使用 AngularJS 的 $resource 来做到这一点,或者我可以吗?

4

3 回答 3

6

$resource 需要一个经典的“RESTful”API 源。这意味着您将拥有一个端点,其中 GET、PUT、POST、DELETE 方法都会影响给定的资源类型,并且这些消息的主体将仅包含资源,而不包括资源和一堆元数据。

对于您正在尝试做的事情,如果这是您坚持使用的 API,您可能必须使用 $http 来滚动您自己的,因为它看起来像它响应的 JSON 包含一堆元数据$resource 不会在意。

唯一的其他选择是编写某种 httpInterceptor ,它将您从 Web 服务返回的内容转换为 $resource 可以更无缝地处理的内容。

虽然从语义上讲,您的 Web 服务可能通常是“RESTful”,但在当前的经典标准中它不是 RESTful。

更多关于 REST的信息在这里


编辑:在上述信息之外,如果没有看到您的 Web API 的签名或不知道您要做什么,就很难更详细地回答您的问题。

于 2012-10-30T20:41:43.037 回答
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              
});
于 2013-05-02T18:51:38.410 回答
1

查看代码,blesh 是正确的,所以我所做的是修改基本 $resource 代码以支持自定义编码器/解码器,以使 $resource 能够使用任何可能具有自定义格式的 REST API。向 angularjs hopping 提出了拉取请求,他们将包含它,所以我不必维护这个单独的分叉:https ://github.com/angular/angular.js/pull/1514

于 2012-11-05T17:01:44.973 回答