Единственный способ разрешить перетаскивание в сетке - это, чтобы каждый элемент сетки был одним cdkDropList.
Реклама: элементы не перемещаются во время перетаскивания
Ну, так как данные каждого cdkDropList будут объектом, данными, которые мы хотим транспортировать, и индексом
[cdkDropListData]="{item:product,index:j}"
Итак, наша функция dropEvent изменяет данные массива в соответствии с этими значениями
drop(event: CdkDragDrop<any>) {
this.data[event.previousContainer.data.index]={...event.container.data.item}
this.data[event.container.data.index]={...event.previousContainer.data.item}
event.currentIndex=0;
}
Да! мы не обязаны использовать падение, как показывают примеры. Подумайте, что единственное, что нам нужно, это изменить массив.
Есть еще одна вещь, которую нужно сделать, сделать так, чтобы "dragPlaceHolder стал пустым div
<div cdkDrag>
....
<div *cdkDragPlaceholder></div>
</div>
Ну, html это несколько сложных, потому что собственный md c -image-list является сложным. Важно отметить, что весь cdkDropList должен быть заключен в div ckdDropListGroup
<div cdkDropListGroup>
<ul class="mdc-image-list my-image-list" style="padding-left: 10px;padding-right: 10px;">
<ng-container *ngFor="let product of data; let j = index;">
<li class="mdc-image-list__item" cdkDropList [cdkDropListData]="{item:product,index:j}"
cdkDropListOrientation="horizontal" (cdkDropListDropped)="drop($event)">
<div cdkDrag>
<div class="mdc-image-list__image-aspect-container">
<ng-container *ngIf="product.image == null; else productImage">
<img src="" class="mdc-image-list__image imagenotfound">
</ng-container>
<ng-template #productImage>
<img [src]="product.image" class="mdc-image-list__image">
</ng-template>
</div>
<div class="mdc-image-list--with-text-protection">
<div class="mdc-image-list__supporting mdc-image-list__supporting">
<span class="mdc-image-list__label">{{product.name}}</span>
</div>
</div>
<div class="example-custom-placeholder" *cdkDragPlaceholder></div>
</div>
</li>
</ng-container>
</ul>
</div>
вот ваш разветвленный стекблиц
ПРИМЕЧАНИЕ. Если кому-то нужен более простой пример, посмотрите этот еще один стек