首页 > 解决方案 > MatTableDataSource 如何获取数据集的排序顺序?

问题描述

假设我有一个mat-tablewith mat-sort-headerandmatSort来启用排序,并且 with [dataSource]="tableDetails"。将数据提取到 中后sampleData,我使用以下内容初始化表:

this.tableDetails = new MatTableDataSource(this.sampleData);

我有如下示例数据,并且是默认顺序:

sampleData = 
[
    {'id':1, 'name':'item 1'},
    {'id':2, 'name':'item 2'},
    {'id':3, 'name':'item 3'}
]

我可以用this.tableDetails.data[0]. 现在,如果我使用按降序mat-sort-header对表格进行排序id,显示的第一项将是{'id':3, 'name':'item 3'},但this.tableDetails.data[0]仍返回{'id':1, 'name':'item 1'}. 我注意到 mat-sort-header 不会改变数据源的原始顺序。关于如何获得排序顺序的任何想法?

标签: angularangular-material

解决方案


在 dataSource 上,您有一个 sortData 方法,可用于获取已排序的表数据。

MatTableDataSource sortData 方法

根据 MatSort 的状态获取数据数组的排序副本。在对过滤的数据进行更改或从 MatSort 发出排序更改后调用。默认情况下,该函数检索活动排序及其方向,并通过使用sortingDataAccessor 检索数据来比较数据。对于数据排序的自定义实现,可能会被覆盖。

this.dataSource.sortData(this.dataSource.data, this.dataSource.sort)

推荐阅读