5

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

感谢你的帮助。

4

3 回答 3

6

这是因为标准sortingDataAccessor将数字字符串转换为数字和 Javascript 1 > 'one',并且1 < 'one'两者都计算为false.

sortingDataAccessor作为一种解决方法,您可以在没有演员表的情况下定义自己的:

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

解决方法是从这个Github issue复制的。

于 2018-03-28T20:51:46.807 回答
0
this.dataSource.sortingDataAccessor = (item, property) => ['length', 'age'].includes(property) ? +item[property] : item[property];
于 2022-01-13T19:54:43.163 回答
0

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

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

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

于 2019-04-14T13:16:14.473 回答