Я пытаюсь перебрать глубоко вложенный 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.
Это начало вашего JSON? @than прав. ваш JSON, вероятно, не в формате массива.
@Sarah, мои извинения - я изменил данные, чтобы представить структуру, с которой я работаю.
@ncubed Пробовали ли вы что-то вроде <li *ngFor = "let place of renderedItems.places">{{place.phoneNumber}}</li>, чтобы сначала проверить, печатает ли это что-нибудь?
@ Сара - да, я пробовал это. Я получаю [object Object] в качестве вывода.
@ncubed хорошо. но похоже, что места - это массив, так что это должно работать. Вы можете попробовать вывести renderedItems.places в консоль? console.info(RenderedItems.places);
@ Сара - так что это сработало. Но он просто печатает значение phoneNumber, я хотел бы напечатать все значения в структуре.





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