【问题标题】:How does one read an array of arrays with AngularJS $resource?如何使用 AngularJS $resource 读取一组数组?
【发布时间】:2015-10-29 20:09:26
【问题描述】:

我正在创建一个服务,它应该使用带有 $resource 的 AngularJS 读取数组数组。我看到我的服务返回了一个不错的 JSON 字符串,例如:

[["Year-Month","e","i"],["2015-Mar",133.442,124.379],["2015-Apr",163.057,126.804],["2015-May",170.029,112.344],["2015-Jun",170.939,125.220],["2015-Jul",177.132,133.504],["2015-Aug",176.723,117.596]]

不幸的是,当我读到它时:

    var tResource = $resource("/t/CH/6X", {}, { get: {method:  'GET', cache: true, 
isArray: true}});
    tResource.get({}, function(data){
        ...
    });

它只是一个数组。

很遗憾收到的数据不是收到的数组。我猜是一个包含矩阵中所有行的 Resource 对象。每行都有代表行号的键,并有另一个资源对象作为值,该对象包含再次存储为键/值的每一列,其中键是列号。

换句话说,我想在我的成功函数中接收服务器发送的二维数组作为数据。

我该怎么做?

【问题讨论】:

    标签: json angularjs multidimensional-array resources


    【解决方案1】:

    您可以将数组包装到 JSON 对象中: {arr: [["Year-Month","e","i"],["2015-Mar",133.442,124.379],["2015-Apr",163.057,126.804],["2015-May",170.029,112.344],["2015-Jun",170.939,125.220],["2015-Jul",177.132,133.504],["2015-Aug",176.723,117.596]]}

    然后处理结果。

    如果我没记错的话,JSON 规范实际上不允许除了对象数组之外的最顶层数组。

    【讨论】:

    • 我不知道有任何此类 JSON 规范禁止。可以提供参考吗?
    • 我对规范有误。它实际上确实允许将数组作为最顶层元素。但是,对于将数组作为最顶层元素有一些注意事项。有关详细信息,请参阅此讨论:stackoverflow.com/questions/3833299/…
    【解决方案2】:

    不幸的是 AngularJS $resource 似乎无法处理这个用例。它要么支持单个对象(一个“资源”,将在请求完成后填充数据),要么支持一个对象数组(每个对象将在请求成功后填充一个“资源”)。

    解决方案是使用较低级别的$http 对象,如下所示。 (请注意,我使用的是 ES6 语法,带有箭头函数等。)

    const promise = $http.get("/t/CH/6X").then(httpResponse => httpResponse.data);
    

    $resource 不同,它将返回一个稍后将自动填充的对象,它返回一个承诺,当履行时,将提供您请求的 JSON。 (注意then(httpResponse => httpResponse.data);如果没有这个,该语句将向$http 对象本身返回一个promise。)

    有关$resource 限制的更多信息,请参阅 Tricky behavior of AngularJS $resource service。对于缓存等,请参阅另一个链接中的$http 文档。

    【讨论】:

      猜你喜欢
      • 2016-06-12
      • 1970-01-01
      • 2020-04-09
      • 2013-07-28
      • 1970-01-01
      • 2017-05-16
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多