Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何以编程方式触发mat表排序?_Angular_Angular Components_Mat Table - Fatal编程技术网

Angular 如何以编程方式触发mat表排序?

Angular 如何以编程方式触发mat表排序?,angular,angular-components,mat-table,Angular,Angular Components,Mat Table,我有一个表,它使用mat sort和一个定制的sortingDataAccessor来对元素中的一些嵌套数据进行排序(不确定是否相关)。这很好,数据被排序,问题发生在异步更新数据时,因为现在数据不再是有序的,因为它被更改了,而表没有更新它的顺序 那么,如何通过编程触发排序呢?或者更确切地说,即使更新了dataSource.data,如何始终保持表的排序 Stackblitz展示问题: 谢谢 我不确定这是否是官方方式(可能不符合),但在重新分配以前的MatSort之前,将sort属性设置为MatT

我有一个表,它使用mat sort和一个定制的sortingDataAccessor来对元素中的一些嵌套数据进行排序(不确定是否相关)。这很好,数据被排序,问题发生在异步更新数据时,因为现在数据不再是有序的,因为它被更改了,而表没有更新它的顺序

那么,如何通过编程触发排序呢?或者更确切地说,即使更新了
dataSource.data
,如何始终保持表的排序

Stackblitz展示问题:


谢谢

我不确定这是否是官方方式(可能不符合),但在重新分配以前的
MatSort
之前,将
sort
属性设置为
MatTableDataSource
为null似乎可以做到这一点

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

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

注意:根据此注释,角度材质不寻找对基础源的更改

将数组传递给表时,仅当 数组引用已更改,因为它基于 使用不可变的数据数组

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

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