根据要求,我有两个可折叠面板,每个面板都有一个独立的表。单击第一个可折叠面板,它会打开并调用API,从后端获取数据,并呈现在第一个可折叠面板中的表上。使用此表,排序工作正常,但当我打开第二个可折叠面板时,排序不工作。
HTML代码:
<mat-accordion multi="false" [togglePosition]="'before'">
<ng-container *ngFor="let item of usersData; let i=index;last as last">
<mat-expansion-panel class="mt-2" #isExpanded>
<mat-expansion-panel-header (click)="showData(item.id, isExpanded.expanded)">
<table>
<tr>
<th class="col-4 px-2">Number</th>
<th class="col-4">Name</th>
<th class="col-4">Date</th>
<td> <button mat-icon-button matTooltip="Delete">
<mat-icon class="mat-icon mat-primary">delete</mat-icon>
</button>
</td>
</tr>
<tr>
<td class="col-4 px-2"><span matTooltip="{{item.number}}">{{item.number}}</span></td>
<td class="col-4"><span matTooltip="{{item.name}}">{{item.name}}</span></td>
<td class="col-4"><span matTooltip="{{item.createdAt | date: 'yyyy-MM-dd'}}">{{item.createdAt | date: 'yyyy-MM-dd'}}</span></td>
<td></td>
</tr>
</table>
</mat-expansion-panel-header>
<div class="m-2" fxLayout="row wrap" fxLayoutGap="20px">
<div class="bh-table-title bh-table mt-2 scroll">
<table mat-table *ngIf="dataSource.data.length > 0" [dataSource]="dataSource" matSort #MatSorteds matSortStart="desc">
<ng-container matColumnDef="number">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Number</th>
<td mat-cell *matCellDef="let element" matTooltip="{{element.number}}">
<button class="link" (click)="navigate(element)">{{element.number}}</button>
</td>
</ng-container>
<ng-container matColumnDef="Name">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Name</th>
<td mat-cell *matCellDef="let element" matTooltip="{{element.Name}}">
{{element.name}}</td>
</ng-container>
<ng-container matColumnDef="createdAt">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Date</th>
<td mat-cell *matCellDef="let element" matTooltip="{{element.createdAt| date: 'yyyy-MM-dd'}}">
{{element.createdAt | date: 'yyyy-MM-dd'}}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="columnsToDisplay;sticky: true" mat-sort></tr>
<tr mat-row *matRowDef="let row; columns: columnsToDisplay;"></tr>
</table>
</div>
</div>
<div class="no-records-panel" *ngIf="dataSource.data.length === 0">No Records found</div>
</mat-expansion-panel>
</ng-container>
</mat-accordion>
组件代码:
@ViewChild(MatSort) matSort!: MatSort;
ngAfterViewInit(): void {
this.dataSource.data = this.data;
this.dataSource.paginator = this.paginator;
this.dataSource.sort = this.matSort;
}
1条答案
按热度按时间lb3vh1jj1#
你有一个独特的 accordion 打开的时间,所以唯一的是"给时间"的Angular 显示数据表之前,asig的垫排序。
而不是使用ngAfterViewInit,它是当您获得数据时,您需要指定
我假设你有一个函数
showData
这是因为ViewChild获得了找到的"第一个" MatSort。
然后,始终都是"visibles"(不在 * ngIf下),可以确保第一个位置的Querylist元素是第一个表的第一个数学排序。
因此,首先我们需要"删除"
*ngIf
并定义一个dataSource数组
所以,就像
现在,当给dataSource.sort赋值时
我们能做的
然后为MathDataSource赋值