Я пытаюсь отобразить вложенный массив json в таблицу материалов angular. Мои данные работают нормально, если мои json не имеют вложенных массивов.
Json
{
"rows": [
{
"mst": {
"field": "createDate",
"value": "2017-06-02"
},
"gsc": {
"field": "Account/Audit/Creation/Date",
"value": "2017-06-02"
}
},
{
"mst": {
"field": "startDate"
},
"gsc": {
"field": "startDate"
}
},
{
"mst": {
"field": "status",
"value": "ACTIVE"
},
"gscs": [
{
"field": "Account/LineOfBusiness/Type~Status",
"value": "C~A"
},
{
"field": "Account/LineOfBusiness/Type~Status",
"value": "I~A"
}
],
"gscvalue": "Active"
},
{
"mst": {
"field": "statusDate"
},
"gsc": {
"field": "statusDate"
}
},
{
"mst": {
"field": "statusReason"
},
"gsc": {
"field": "statusReason"
}
},
{
"mst": {
"field": "deliveryMethod",
"value": "PAPER"
},
"gscs": [
{
"field": "Electronic",
"value": "N"
},
{
"field": "ElectronicOutsourced",
"value": "N"
},
{
"field": "Hardcopy",
"value": "Y"
}
],
"gscvalue": "Paper"
},
{
"mst": {
"field": "statementFormat",
"value": "Standard"
},
"gsc": {
"field": "?"
}
},
{
"mst": {
"field": "statementLanguagePreference",
"value": "Spanish"
},
"gsc": {
"field": "Account/Language",
"value": "S"
},
"gscvalue": "Spanish"
},
{
"mst": {
"field": "type",
"value": "RES"
},
"gsc": {
"field": "Account/Type",
"value": "RES"
}
}
]
}
HTML
<div class="example-container mat-elevation-z8" *ngIf="rows?.length>0">
<table mat-table [dataSource]="dataSource">
<ng-container matColumnDef="mst Fields">
<th mat-header-cell *matHeaderCellDef> mst Fields </th>
<td mat-cell *matCellDef="let row" class="tablePadding"> {{row.mst.field}} </td>
</ng-container>
<ng-container matColumnDef="mst">
<th mat-header-cell *matHeaderCellDef> mst value </th>
<td mat-cell *matCellDef="let row"> {{row.mst.value}} </td>
</ng-container>
<ng-container matColumnDef="gsc Fields">
<th mat-header-cell *matHeaderCellDef> gsc Fields </th>
<td mat-cell *matCellDef="let row"> {{row.gsc.field}} </td>
</ng-container>
<ng-container matColumnDef="gsc">
<th mat-header-cell *matHeaderCellDef> gsc value </th>
<td mat-cell *matCellDef="let row"> {{row.gsc.value}} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns; let row"></tr>
modal.ts
export class ResultField {
field: string;
value: string;
valueList: string[];
}
export class ResultRow {
mst: ResultField;
gsc: ResultField;
gscs: ResultField[];
gscValue: String;
}
Моя текущая таблица будет отображать данные вплоть до достижения mst.field {status} , Я получаю сообщение об ошибке
SystemComponent.html:29 ERROR TypeError: Cannot read property 'field' of undefined
Я понимаю, что эта ошибка возникает из-за моего текущего логина c в моем html. Как я могу решить эту проблему?
Следовательно, я не хочу gscs.field в отдельном столбце. Я хочу, чтобы эти значения были в столбце gs c .field и gscValue в столбце gs c .value. .
Попытка
<ng-container matColumnDef="gsc Fields">
<th mat-header-cell *matHeaderCellDef> gsc Fields </th>
<td mat-cell *matCellDef="let row" *ngIf="row.gsc.field"> {{row.gsc.field}} </td>
<td mat-cell *matCellDef="let row" *ngIf="row.gsc.field"> {{row.gscs.field}} </td>
</ng-container>
Но с angular logi c в теге может быть только одна * директива.
My ближайшая ссылка Необходимо отобразить вложенный JSON Объект в таблице данных материала , но ответов solid не было.
Попытка 2
Я попытался использовать более простой подход, чтобы просто распечатать свои данные.
<div>
<h1>Testing</h1>
<div *ngFor="let row of rows">
<!-- <p *ngIf="row.gsc.field">{{row.gsc.field}}</p>
<p *ngIf="row.gsc.value">{{row.gsc.value}}</p> -->
<p>{{row.mst.field}}</p>
<p>{{row.mst.value}}</p>
<div *ngFor= "let gscs of row.gscs">
<p *ngIf="gscs.field">{{gscs.field}}</p>
<p *ngIf="gscs.value">{{gscs.value}}</p>
</div>
<p *ngIf = "row.gscvalue">{{row.gscvalue}}</p>
</div>
</div>
С помощью этого фрагмента кода я могу получить вложенные значения, однако получаю ту же ошибку, что и выше, когда я раскомментирую эти две строки.
<!-- <p *ngIf="row.gsc.field">{{row.gsc.field}}</p>
<p *ngIf="row.gsc.value">{{row.gsc.value}}</p> -->
ОШИБКА TypeError: Невозможно прочитать свойство 'field' из неопределенного
С указанным выше JSON я хочу создать таблицу, которая выглядит следующим образом.