【发布时间】:2020-04-02 08:24:30
【问题描述】:
喏,
我正在使用 Angular 8,我需要一个带有可扩展行的主表,并且我需要查看每一行的详细信息。
我的实际问题是排序仅适用于父亲表而不适用于子表。
这是我的 HTML 代码:
<table mat-table [dataSource]="dataSource" multiTemplateDataRows matSort #sorter1="MatSort">
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef> ID </th>
<td mat-cell *matCellDef="let element"> {{ element.id }} </td>
</ng-container>
<ng-container matColumnDef="expandedDetail">
<td mat-cell *matCellDef="let element" [attr.colspan]="2">
<div>
<table mat-table [dataSource]="dataSource2" matSort #innerSorts="MatSort">
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef> ID </th>
<td mat-cell *matCellDef="let element"> {{ element.id }} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="['id']"></tr>
<tr mat-row *matRowDef="let element; columns: ['id'];"></tr>
</table>
</div>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="['id']"></tr>
<tr mat-row *matRowDef="let element; columns: ['id'];"
class="example-element-row"
[class.example-expanded-row]="expandedElement === element"
(click)="clickRow(element)">
</tr>
<tr mat-row *matRowDef="let row; columns: ['expandedDetail']"></tr>
</table>
这是我的 TypeScript 代码:
imports ...
@Component({
selector: 'my-nested-tables',
styleUrls: ['my-nested-tables.css'],
templateUrl: 'my-nested-tables.html',
animations: [
trigger('detailExpand', [
state('collapsed', style({height: '0px', minHeight: '0'})),
state('expanded', style({height: '*'})),
transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
]),
],
})
export class MyNestedTablesComponent {
@Input() element: Array<Element>;
@Input() element2: Array<Element>;
dataSource1: MatTableDataSource<Element>(this.element);
dataSource2: MatTableDataSource<Element>(this.element2);
expandedElement: Element;
@ViewChild("sorter1", {static:true}) sorter1: MatSort;
@ViewChildren("innerTables") tables: QueryList<MatTable<Element>>
@ViewChildren("innerSorts") innerSorts: QueryList<MatSort>;
constructor(private cd: ChangeDetectorRef) { }
ngOnInit() {
this.dataSource.sort = sorter1;
}
ngOnChanges(change: SimpleChanges) {
this.dataSource1.data = this.element;
this.dataSource2.data = this.element2;
}
clickRow(element: Element) : void {
this.expandedElement = this.expandedElement === element ? null : element;
this.onLoadMyNestedElement.emit(this.expandedElement.id); // This is a event that update the element2 property (HTTP request).
this.cd.detectChanges();
this.tables.forEach((table, index) => (table.dataSource as MatTableDataSource<Element>).sort = this.innerSorts.toArray()[index]);
}
}
export class Element {
public id: number;
}
你能帮帮我吗?
Grazie Mille!
【问题讨论】:
标签: html typescript angular8 mat-table nested-table