Как прочитать массив массивов с ресурсом AngularJS $?

0

Я создаю службу, которая должна читать массив массивов, используя AngularJS с $ resource. Я вижу, что моя служба возвращает приятную строку 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, содержащий все строки в моей матрице. Каждая строка имеет ключ, представляющий номер строки и имеющий в качестве значения другой объект ресурса, который содержит каждый столбец, который снова хранится как ключ/значение, где ключ является номером столбца.

Другими словами, я хотел бы получить как данные в моей функции успеха просто 2-мерные массивы, отправленные сервером.

Как я могу это сделать?

Теги:
multidimensional-array
resources

2 ответа

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 фактически не позволяет использовать самые массивные массивы, кроме массивов объектов.

  • 0
    Я не знаю ни о каком таком запрете спецификации JSON. Не могли бы вы предоставить ссылку?
  • 0
    Я был неправ по поводу спецификации. Это на самом деле позволяет массив как верхний элемент. Однако есть некоторые соображения относительно массивов как верхних элементов. Смотрите это обсуждение для более подробной информации: stackoverflow.com/questions/3833299/…
0

К сожалению, $resource AngularJS $resource, похоже, не справляется с этим вариантом использования. Он либо поддерживает один объект ("ресурс", который будет заполнен данными после завершения запроса), либо массив объектов (каждый из которых будет заполнен "ресурсом" после успешного завершения запроса).

Решение заключается в использовании объекта $http нижнего уровня, как это. (Обратите внимание, что я использую синтаксис ES6, с функциями стрелок и т.д.)

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

В отличие от $resource, который вернет объект, который будет автоматически заполнен позже, это возвращает обещание, которое, когда оно будет выполнено, предоставит запрашиваемый JSON. (Обратите внимание на then(httpResponse => httpResponse.data), без этого выражение вернет обещание самому объекту $http.)

Дополнительные сведения об ограничениях $resource см. В разделе " Поврежденное поведение службы ресурсов AngularJS $". Для кэширования и т.д. См. Документацию $http из другой ссылки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню