Ciao,
Я играю с 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;
}
Вы можете мне помочь?
Грац ie Милле!