以下のデータがあります
[
{
"_id": "c9d5ab1a",
"subdomain": "wing",
"domain": "aircraft",
"part_id": "c9d5ab1a",
"info.mimetype": "application/json",
"info.dependent": "parent",
"nested": [
{
"domain": "aircraft",
"_id": "c1859902",
"info.mimetype": "image/jpeg",
"info.dependent": "c9d5ab1a",
"part_id": "c1859902",
"subdomain": "tail"
}
]
},
{
"_id": "1b0b0a26",
"subdomain": "fuel",
"domain": "aircraft",
"part_id": "1b0b0a26",
"info.mimetype": "image/jpeg",
"info.dependent": "no_parent"
}
]
ここで"info.dependent": "parent"
の場合、ネストされ、"info.dependent": "no_parent"
その後、子を持ちません。動的テーブルを作成しようとしましたが、ネストされたテーブルで折りたたみ/展開できるようにする方法に行き詰まっています。これが stackblitz の私のコードです。
<mat-table class=" mat-elevation-z8" [dataSource]="dataSource">
<ng-container [matColumnDef]="col" *ngFor="let col of displayedColumns">
<mat-header-cell *matHeaderCellDef> {{ col }} </mat-header-cell>
<mat-cell *matCellDef="let element"> {{ element[col] }} </mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row;columns:displayedColumns"></mat-row>
</mat-table>
。ts
public data = [
{
"_id": "c9d5ab1a",
"subdomain": "wing",
"domain": "aircraft",
"part_id": "c9d5ab1a",
"info.mimetype": "application/json",
"info.dependent": "parent",
"nested": [
{
"domain": "aircraft",
"_id": "c1859902",
"info.mimetype": "image/jpeg",
"info.dependent": "c9d5ab1a",
"part_id": "c1859902",
"subdomain": "tail"
}
]
},
{
"_id": "1b0b0a26",
"subdomain": "fuel",
"domain": "aircraft",
"part_id": "1b0b0a26",
"info.mimetype": "image/jpeg",
"info.dependent": "no_parent"
}
];
dataSource = new MatTableDataSource([]);
displayedColumns = ['_id', 'subdomain', 'domain', 'part_id', 'info.mimetype', 'info.dependent'];
constructor(){
this.displayedColumns = this.displayedColumns;
this.dataSource = new MatTableDataSource(this.data);
}
入れ子形式は以下のようになります
行1-> _id、サブドメイン、ドメイン、情報。依存
特定の行をクリックすると、ネストされたデータが展開され、列名と行データを含むテーブルに表示されます。
"nested": [
{
"domain": "aircraft",
"_id": "c1859902",
"info.mimetype": "image/jpeg",
"info.dependent": "c9d5ab1a",
"part_id": "c1859902",
"subdomain": "tail"
}
]
ドキュメントの例 を見ると特に 展開可能な行があるもの :
<mat-table>
にmultiTemplateDataRows
ディレクティブがありません@detailExpand
トリガーがありませんここ は、データを使用したドキュメントの例です
編集(コメントに関して)
動的列を取得する方法は次のとおりです。
これをコンポーネントに追加します
getKeys(object): string[] {
return Object.keys(object);
}
テンプレートのメソッドを使用します(添付の詳細画面とnested
キーの下の複数の要素に関するメモに従って更新されたテンプレート):
<div class="example-element-descriptions">
<div *ngFor="let nested of element['nested']"
class="example-element-description">
<div *ngIf="element['info.dependent'] === 'parent'">
<div class="example-element-description__header">
<div class="example-element-description__cell"
*ngFor="let key of getKeys(nested)">{{key}}</div>
</div>
<div class="example-element-description__content">
<div class="example-element-description__cell"
*ngFor="let key of getKeys(nested)">{{element[key]}}
</div>
</div>
</div>
<div *ngIf="element['info.dependent'] === 'no_parent'">no parent</div>
</div>
</div>