数字和文本列的排序问题

时间:2018-03-28 06:44:18

标签: angular angular-material angular-material-5 angular-cdk

我有角度材料数据源。角材料版本是^ 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>

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

这是因为标准sortingDataAccessor将数字字符串转换为数字,而Javascript 1 > 'one' and 1 < 'one'中的数字字符串都会计算为false

作为一种变通方法,您可以在没有强制转换的情况下定义自己的sortingDataAccessor

ngAfterViewInit() {    
  this.dataSource.sort = this.sort;
  this.dataSource.sortingDataAccessor = (data, attribute) => data[attribute];
}

从此Github issue复制解决方法。

答案 1 :(得分:0)

您需要取出那些不是数字的字符,并将包含数字字符的字符串转换为数字类型值。

您的初始列值:“ ID0239”。 取出字符后:“ 0239”。 将字符串转换为数字后:0239。

0239是您需要在sortingDataAccessor函数内部返回的值。