【问题标题】:MatTableDataSource how to get sorted order of data set?MatTableDataSource 如何获取数据集的排序顺序?
【发布时间】:2021-09-23 09:33:57
【问题描述】:

假设我有一个 mat-tablemat-sort-headermatSort 来启用排序,以及 [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 不会改变数据源的原始顺序。关于如何获得排序顺序的任何想法?

【问题讨论】:

    标签: angular angular-material


    【解决方案1】:

    你可以访问新的位置o传递给一个新的数组过滤器排序后;

     // let yourNewData = [ ... this.dataSource.filteredData]
    
     ngAfterViewInit() {
        this.dataSource.sort = this.sort;
        console.log(this.dataSource.filteredData[0])
      }
    

    【讨论】:

      【解决方案2】:

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

      MatTableDataSource sortData method

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

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

      【讨论】:

      • 我调用这个方法后,原始数据集this.dataSource.data会被排序,有没有办法在不改变原始数据集顺序的情况下得到排序后的副本?
      • 您可以创建数据的副本并对其进行处理,而不是对主数据源进行处理。 backupDataSource = [ ... this.dataSource] 等。我是否正确理解了这个问题?我不确定是不是你的意思
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 2010-10-25
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      相关资源
      最近更新 更多