了解 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的主要内容,如果未能解决你的问题,请参考以下文章

深入了解AngularJs-Ui-router

2.3了解AngularJS模块和依赖注入

angularjs基础了解

了解 angularJS $resource isArray 属性

了解控制器和模块angularJs [重复]

对AngularJs的简单了解