我有角度材料数据源。角材料版本是^ 5.0.3排序正在工作。但是对于某些列,它排序不正确。那里有数字和文字。例如,排序结果如“XXX”,“1”,“1tesxt”,“1”,“OPD”,“OXD”,“12”。
<mat-table #table [dataSource]="dataSource" matSort >
<ng-container matColumnDef="model">
<mat-header-cell *matHeaderCellDef mat-sort-header> Model </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.model}} </mat-cell>
</ng-container>
感谢您的帮助。
这是因为标准的sortingDataAccessor
将数字字符串转换为数字,而在Javascript 1 > 'one' and 1 < 'one'
中,它们都评估为false
。
作为一种解决方法,您可以在没有强制转换的情况下定义自己的sortingDataAccessor
:
ngAfterViewInit() {
this.dataSource.sort = this.sort;
this.dataSource.sortingDataAccessor = (data, attribute) => data[attribute];
}
解决方法是从这个Github issue复制的。
您需要取出那些不是数字的字符,并将包含数字字符的字符串转换为数字类型值。
您的初始列值:'ID0239'。取出角色后:'0239'。将字符串转换为数字:0239。
0239是您需要在sortingDataAccessor函数内返回的值。