【问题标题】:Understanding AngularJS's $resource了解 AngularJS 的 $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 来做到这一点,或者我可以吗?

【问题讨论】:

    标签: javascript angularjs ngresource


    【解决方案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

        【讨论】:

          猜你喜欢
          • 2015-04-14
          • 1970-01-01
          • 2018-06-30
          • 1970-01-01
          • 2016-08-02
          • 1970-01-01
          • 2015-11-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多