Как запустить сортировку мат-таблицы программно? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть таблица, использующая mat-sort с пользовательским sortingDataAccessor, чтобы иметь возможность сортировать по некоторым вложенным данным в элементе (не уверен, если уместно). Это работает нормально, данные сортируются, проблема возникает, когда данные обновляются асинхронно, потому что теперь данные уже не в порядке, так как они изменены, а таблица не обновила свой порядок.

Так как я могу запустить сортировку программно? Или, скорее, как сохранить таблицу отсортированной всегда, даже если dataSource.data обновляется?

Stackblitz для демонстрации проблемы: https://stackblitz.com/edit/angular-qoytbq

Спасибо!

1 Ответ

1 голос
/ 20 апреля 2020

Я не уверен, является ли это официальным способом (и может быть не в соответствии с этим вопросом ), но установив для свойства 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

Примечание : angular материал не ищет изменений в базовые источники, в соответствии с этой проблемой github комментарий

При передаче массива в таблицу он будет перерисовываться только при изменении ссылки на массив, поскольку он основан на Принцип использования неизменяемого массива данных.

Простой обходной путь - переназначить свойство источника data, когда базовые данные изменяются

this.datasource.data = [...ELEMENT_DATA];//For your stackblitz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...