我有一个使用mat-sort和自定义sortingDataAccessor的表,以便能够对元素内的某些嵌套数据进行排序(不确定是否相关)。这可以很好地工作,可以对数据进行排序,当数据被异步更新时会出现问题,因为现在数据已不再按顺序排列,因为它已更改并且表没有按顺序更新。
所以我如何以编程方式触发排序?或者更确切地说,即使dataSource.data
得到更新,如何始终保持表格排序?
Stackblitz展示问题:https://stackblitz.com/edit/angular-qoytbq
谢谢!
我不确定这是否是正式的方式(根据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;
注意:根据此github issue注释,棱角材料不查找基础源的更改
[将数组传递到表时,只有在数组引用已更改,因为它基于以下原理使用不可变数据数组。
一个简单的解决方法是在基础数据更改时重新分配源的data
属性
this.datasource.data = [...ELEMENT_DATA];//For your stackblitz