Динамическое создание таблиц из вложенного json в Angular 7

Я пытаюсь перебрать глубоко вложенный json. Моя конечная цель - динамически отображать данные json в таблицы.

Я хочу отметить, что я новичок в Angular. Так что это может быть фундаментальное непонимание того, что я использую. Если это так, то было бы полезно указать общее направление.

В настоящее время я пытаюсь передать json в AppComponent из renderJsonComponent и рекурсивно вызывать компонент renderJson.

import { Component } from '@angular/core';
import { items } from './testData'

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  public renderedItems = items
}
<app-render-json [renderedItems] = "renderedItems"></app-render-json>

import { Component, Input } from '@angular/core';

@Component({
  selector: 'app-render-json',
  templateUrl: './render-json.component.html',
  styleUrls: ['./render-json.component.css']
})
export class RenderJsonComponent {
  @Input() public renderedItems;
}
<ul *ngIf = "renderedItems.facilities">
   {{ renderedItems }}
  <li *ngFor = "let items of renderedItems">
    <app-render-json [renderedItems]=items></app-render-json>
  </li>
</ul>

в настоящее время он будет отображать [object Object], и я получаю сообщение об ошибке:

RenderJsonComponent.html:3 ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.
    at NgForOf.push../node_modules/@angular/common/fesm5/common.js.NgForOf.ngDoCheck (common.js:3185)
    at checkAndUpdateDirectiveInline (core.js:22004)
    at checkAndUpdateNodeInline (core.js:23265)
    at checkAndUpdateNode (core.js:23227)
    at debugCheckAndUpdateNode (core.js:23861)
    at debugCheckDirectivesFn (core.js:23821)
    at Object.eval [as updateDirectives] (RenderJsonComponent.html:3)
    at Object.debugUpdateDirectives [as updateDirectives] (core.js:23813)
    at checkAndUpdateView (core.js:23209)
    at callViewAction (core.js:23450)

jsonData

const data = {
    "places": [
        {
            "thing": "city",
            "address": {
                "address": "abc 123, USA",
                "address1": "",
                "address2": "",
                "address3": "",
                "city": "",
                "stateProvince": "",
                "postal": "",
                "lat": 0,
                "lng": 0
            },
            "phoneNumber": "1800-pleasedontbemean",
            "aaaaa": [
                {
                    "bbbbbb": [
                        {
                            "code": "",
                            "description": "help"
                        }
                    ],
                    "hours": {
                        "normal": [
                            {
                                "type": "",
                                "hours": "24/7"
                            }
                        ],
                        "saturday": [
                            {
                                "type": "",
                                "hours": "23/8"
                            }
                        ]
                    },
                    "notes": "none"
                }
            ]
        }
    ],
 }


Я хотел бы динамически отображать таблицы на основе json.

«NgFor поддерживает только привязку к Iterables, таким как Arrays», четко указывает, что не так, поэтому я бы начал с того, что на самом деле представляет собой тип «renderedItems», действительно ли это массив. Подозреваю, что вы передаете объект

than 03.02.2019 22:53

Это начало вашего JSON? @than прав. ваш JSON, вероятно, не в формате массива.

Sarah 03.02.2019 23:04

@Sarah, мои извинения - я изменил данные, чтобы представить структуру, с которой я работаю.

ncubed 04.02.2019 00:14

@ncubed Пробовали ли вы что-то вроде <li *ngFor = "let place of renderedItems.places">{{place.phoneNumber}}</li>, чтобы сначала проверить, печатает ли это что-нибудь?

Sarah 04.02.2019 01:02

@ Сара - да, я пробовал это. Я получаю [object Object] в качестве вывода.

ncubed 04.02.2019 17:02

@ncubed хорошо. но похоже, что места - это массив, так что это должно работать. Вы можете попробовать вывести renderedItems.places в консоль? console.info(RenderedItems.places);

Sarah 04.02.2019 18:14

@ Сара - так что это сработало. Но он просто печатает значение phoneNumber, я хотел бы напечатать все значения в структуре.

ncubed 04.02.2019 20:59
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
7
462
0

Другие вопросы по теме