Это известная проблема с перетаскиванием CDK: https://github.com/angular/material2/issues/13372
По сути, вам нужно иметь родительский div, который определен как «cdkDropListGroup», тогда вы должны рассматривать каждый перетаскиваемый элемент какcdkDropList в дополнение к наличию на нем свойства cdkDrag.Это должно сделать так, чтобы каждый элемент был своим собственным контейнером, и директива cdkDropListGroup соединяет их все вместе.
Затем вы можете иметь * ngFor в контейнере cdkDropList, чтобы порождать по одному для каждого вашего массива.Предметы.Поместите [cdkDropListData] = "index" в cdkDropList, чтобы вы могли перенести текущий перетаскиваемый индекс в cdkDrag.С дочерним элементом cdkDrag вы можете получить этот индекс с помощью [cdkDragData] = "index".Затем установите привязку события (cdkDragEntered) = "enter ($ event)" к дочернему элементу cdkDrag, который будет срабатывать каждый раз, когда вы пытаетесь перетащить элемент в один из новых контейнеров.Внутри введенной функции используйте метод moveItemInArray из CDK для переноса элементов.
entered(event: CdkDragEnter) {
moveItemInArray(this.items, event.item.data, event.container.data);
}
<div style="display:flex;flex-wrap:wrap" cdkDropListGroup>
<div cdkDropList [cdkDropListData]="i" *ngFor="let item of items; let i = index;" [style.width]="item.width || '100%'">
<div cdkDrag [cdkDragData]="i" (cdkDragEntered)="entered($event)">
{{item}}
</div>
</div>
</div>
Если это не сработает, вы можете вместо этого использовать mat-grid для управления макетом.