我的.html文件:
<mat-table [dataSource]="dataSource" padding matSort>
<ng-container matColumnDef="uid">
<!--<mat-header-cell *matHeaderCellDef mat-sort-header>Building UID</mat-header-cell>-->
<mat-header-cell *matHeaderCellDef mat-sort-header>
Building UID
</mat-header-cell>
<mat-cell *matCellDef="let tree" padding>{{tree.uid}}</mat-cell>
</ng-container>
<ng-container matColumnDef="address">
<mat-header-cell *matHeaderCellDef mat-sort-header>
Address
</mat-header-cell>
<mat-cell *matCellDef="let tree" padding>{{tree.location.address}}</mat-cell>
</ng-container>
<ng-container matColumnDef="zipCode">
<mat-header-cell *matHeaderCellDef mat-sort-header>
Zip code
</mat-header-cell>
<mat-cell *matCellDef="let tree" padding>{{tree.location.zipCode}}</mat-cell>
</ng-container>
...
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns"></mat-row>
</mat-table>
我的.ts文件:
@Component({
selector: 'page-buildings',
templateUrl: 'buildings.html',
})
export class BuildingsPage {
@ViewChild(MatSort) sort: MatSort;
...
private displayedColumns: string[] = ["uid", "address", "zipCode", "city", "country", "treeDetails"]; // tslint:disable-line
private dataSource: MatTableDataSource<any>;
...
constructor(...) {
this.dataSource = new MatTableDataSource(...);
this.dataSource.sort = this.sort;
}
...
}
但是在我的mat-table中,排序仅适用于第一列&#34; uid&#34;而不适用于其他列。
我从link(第一个答案)中了解到,在 * matColumnDef =&#34; firstString&#34; 和 {{tree.secondString}} , firstString 必须等于 secondString 才能使其正常工作,但就我而言,它的 tree.firstString.secondString ,我使用了两点。
知道为什么会这样,以及如何让它发挥作用?
当我点击列&#34;构建UID&#34;时,mat-table将被排序,一切正常。但是当我点击其他列(地址,邮政编码,城市,国家)时,它只会排序前两行,只有升序排序有效(降序排序不起作用),其余的行是根本没有排序。
答案 0 :(得分:2)
您需要覆盖sortingAccessor:
this.datasource.sortingDataAccessor = ((item: TableItems, sortHeaderId: string) => {
return item.data[sortHeaderId];
});
在这种情况下,数据在item.data中更深一级而不是项目。
答案 1 :(得分:0)
就我而言,我已经完成了以下工作。
this.dataSource.sortingDataAccessor = ((data: any, sortHeaderId: string) => {
let toReturn: any;
if (sortHeaderId === 'uid')
toReturn = data[sortHeaderId];
else
toReturn = data.location[sortHeaderId];
if (typeof toReturn === 'string')
toReturn = toReturn.toLowerCase();
return toReturn;
});