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

How to trigger mat-table sort programatically?

我有一个 table 将 mat-sort 与自定义 sortingDataAccessor 结合使用,以便能够对元素内的某些嵌套数据进行排序(不确定是否相关)。这工作正常,数据已排序,当数据异步更新时会出现问题,因为现在数据不再按顺序排列,因为它已更改并且 table 尚未更新其顺序。

那么如何以编程方式触发排序?或者更确切地说,即使 dataSource.data 得到更新,我怎样才能始终保持 table 排序?

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

谢谢!

我不确定这是否是官方方式(根据 可能不是),但是将 sort 属性 设置为 MatTableDataSource 在重新分配前一个 MatSort 之前为 null 似乎可以解决问题

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

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

Stackblitz demo

注意:angular material 不会根据此github issue 评论

查找对基础资源的更改

When passing an array to the table, it will only re-render if the array reference is changed because it is based on the principle of using an immutable data array.

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

this.datasource.data = [...ELEMENT_DATA];//For your stackblitz