【问题标题】:Angular nsResource creates an array of char arrays for REST string arraysAngular nsResource 为 REST 字符串数组创建一个字符数组数组
【发布时间】:2014-05-05 21:42:54
【问题描述】:

我有一个提供“活动”数据的网络服务控制器

GET /api/activity/list
GET /api/activity/1
GET /api/activity/activity-slug-name
PUT /api/activity
DELETE /api/activity/1

它还提供一些“元”数据

GET /api/activity/meta/dates
GET /api/activity/meta/states

它们都使用 ngResource 工作得非常好,因为它们都返回 JSON 对象。 但是 /api/activity/meta/dates 没有

它返回一个字符串数组

[
    "2013-06-02T17:05:16Z",
    "2013-06-07T17:05:16Z",
    "2013-08-17T17:05:16Z"
]

ngResource 把它变成一个 char 数组 见:Invalid result from ngResource request with string array

显然我可以将元函数拆分为某种形式的 ActivityMetaService,但我更愿意将它们放在一起

我的问题是

有没有办法阻止 ngResource 执行这种过度的对象分解?

或者我应该用 Angular 提出一个错误?

提前致谢

* 更新 *

感谢马克的评论。如果您将其作为答案,我会接受它,因为它指向 Angular 中的一个错误,而其他两个答案不适合当前架构。

虽然您在技术上是正确的,但自 80 年代中期以来,没有人将字符串视为字符数组,C/C++ 程序员除外 :)

我在 github 上提出了一个带有 angular.js 项目的票,参考下面

https://github.com/angular/angular.js/issues/2664

【问题讨论】:

  • 这是因为在$resource() 内部使用了angular.copy()。当copy() 函数找到一个字符串数组时,它会将字符串视为一个字符数组(实际上就是这样)。我知道没有办法禁用此行为,现在唯一真正的方法是直接使用$http 服务。

标签: angularjs


【解决方案1】:

您可以尝试使用 transformRequest

query: {
  method: 'GET',
  isArray: true,
  transformResponse: function (data, headers) {
    var tranformed = [];
    [].forEach.call(eval(data), function (d) {
        tranformed.push({ name: d });
    });
    return tranformed;
  }

}

【讨论】:

    【解决方案2】:

    要仅获取字符串数组,请改用$http service

    【讨论】:

      【解决方案3】:

      是的!

      https://github.com/klederson/ModelCore 从头开始​​使用 $http 服务,以便更轻松地检查一下!

      【讨论】:

        猜你喜欢
        • 2018-12-12
        • 1970-01-01
        • 2012-07-10
        • 2017-07-30
        • 1970-01-01
        • 2023-02-04
        • 1970-01-01
        • 1970-01-01
        • 2011-05-03
        相关资源
        最近更新 更多