首页 > 解决方案 > 角度数据表排序仅适用于 1 列?

问题描述

排序适用于 Id 列,但它不适用于第二列,为什么会这样?

<mat-table #detailsTable #detailsSort="matSort" [dataSource]="details" matSort>

<ng-container matColumnDef="id">
  <mat-header-cell *matHeaderCellDef mat-sort-header> Id </mat-header-cell>
  <mat-cell *matCellDef="let detail"> {{detail.id}} </mat-cell>
</ng-container>

<ng-container matColumnDef="invoiceCurrencyNetValue">
  <mat-header-cell *matHeaderCellDef mat-sort-header> Net value </mat-header-cell>
  <mat-cell *matCellDef="let detail"> {{detail.attributes.invoiceCurrencyNetValue}} </mat-cell>
</ng-container>

<mat-header-row *matHeaderRowDef="this.detailsColumns; sticky: true"></mat-header-row>
    <mat-row *matRowDef="let row; columns: this.detailsColumns;" matRipple class="element-row"></mat-row>
  </mat-table>

这就是我设置数据并在.ts文件中排序的方式:

details = new MatTableDataSource(details.data);
details.sort = this.detailsSort;

这是列声明:

detailsColumns = [
    'id', 'invoiceCurrencyNetValue'
];

标签: angularangular-material

解决方案


很可能是因为您attributes是一个对象,并且排序需要一个实际值。

例如 detail.id 可以按 id 值排序,但是 detail.attributes.invoiceCurrencyNetValue 不能排序,因为它是一个对象,而不是实际值。

你可以从这里开始:Angular Material 2 DataTable Sorting with nested objects

作为参考,您可以使用“ sortingDataAccessor”扩展您的排序功能


推荐阅读