Я уже довольно давно ломаю голову над этой проблемой. Я хочу добиться двух связанных перетаскиваемых списков постоянной длины. Это означает, что если я перемещаю элемент из одного списка в другой, элемент перемещается в другой список. Это, конечно, тривиально во время события cdkDropListDropped
, но я хочу, чтобы это произошло, как только элемент будет перемещен по списку.
Большинство моих попыток были связаны с использованием события cdkDropListEntered
для:
- Попытайтесь просто переместить элемент в массиве данных:
public enter(list: number, event: CdkDragEnter<User[]>) {
if (list === 0) {
let data = this.schedule.responsible.pop();
this.schedule.queue.unshift(data);
} else {
let data = this.schedule.queue.shift();
this.schedule.responsible.push(data);
}
}
Это привело к ошибкам типа:
core.js: 6185 ОШИБКА DOMException: не удалось выполнить 'insertBefore' на 'Node': узел, перед которым должен быть вставлен новый узел, не является дочерним по отношению к этому узлу
Пробовал использовать
CdkDropList
addItem()
,removeItem()
,getSortedItems()
. Это привело к аналогичным проблемам.Пытался переместить сами DOM-элементы с помощью Renderer2 (и оставить данные нетронутыми)
Есть ли способ добиться того, чего я хочу?
Этот великолепный рисунок краской помогает объяснить, чего я хочу достичь.