如何以编程方式触发mat-table排序?

问题描述 投票:0回答:1

我有一个使用mat-sort和自定义sortingDataAccessor的表,以便能够对元素内的某些嵌套数据进行排序(不确定是否相关)。这可以很好地工作,可以对数据进行排序,当数据被异步更新时会出现问题,因为现在数据已不再按顺序排列,因为它已更改并且表没有按顺序更新。

所以我如何以编程方式触发排序?或者更确切地说,即使dataSource.data得到更新,如何始终保持表格排序?

Stackblitz展示问题:https://stackblitz.com/edit/angular-qoytbq

谢谢!

angular angular-components mat-table
1个回答
1
投票

我不确定这是否是正式的方式(根据this question可能不是),但是在重新分配之前的sort之前将MatTableDataSource属性设置为MatSort为空似乎可以把戏

  @ViewChild(MatSort, {static: true}) sort: MatSort;

  //Change table data here...
  //Trigger sort manually
  this.dataSource.sort = null;
  this.dataSource.sort = this.sort;

Stackblitz demo

注意:根据此github issue注释,棱角材料不查找基础源的更改

[将数组传递到表时,只有在数组引用已更改,因为它基于以下原理使用不可变数据数组。

一个简单的解决方法是在基础数据更改时重新分配源的data属性

this.datasource.data = [...ELEMENT_DATA];//For your stackblitz
© www.soinside.com 2019 - 2024. All rights reserved.