如何以编程方式触发 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;
注意: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
我有一个 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;
注意: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