Цель: Создать таблицу, используя угловой материал, который можно изменить с помощью углового перетаскивания.
Ожидаемое поведение : таблица должна изменить порядок при перетаскивании
Текущее поведение : строки можно перетаскивать, и порядок основного источника данных изменяется, но при удалении строки она возвращается к своей исходной позиции в таблице.
См. Этот пример:
https://stackblitz.com/edit/drag-drop-reorder-mattable
Как это можно исправить / реализовать?
(Кроме того, я не уверен, почему он так плохо оформлен в Stackblitz. Любое понимание там также будет оценено)
Редактировать: Я нашел супер-хакерский способ заставить строки рендериться снова с правильным порядком, но нет способа, которым это должно быть реализовано. Я просто поставил t.renderRows()
, чтобы он выполнялся после обработчика события удаления. Смотрите полную строку ниже
<mat-table #t
cdkDropList
(cdkDropListDropped)="onListDrop($event); t.renderRows()"
[dataSource]="dataSource"
class="mat-elevation-z8">
...
</mat-table>
РЕДАКТИРОВАТЬ 2:
Я сделал простой рефакторинг для использования rxjs, и первое изменение порядка перетаскивания для каждого элемента прекрасно работает. Но когда я пытаюсь переместить элемент, который уже был перемещен один раз, я не получаю ожидаемого поведения. Приложение Stackblitz обновлено.