Если выпадающий список (Drop Zone) находится в другом компоненте, он не является прямым.Чтобы это работало, нам нужно создать выпадающий список в компоненте-источнике и компоненте-получателе и соединить два списка вывода, используя cdkDropListConnectedTo .
drag-source-componentet.ts
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-drag-source',
templateUrl: './drag-source.component.html',
styleUrls: ['./drag-source.component.css']
})
export class DragSourceComponent implements OnInit {
data = [
"apple",
"boy",
"cat",
"dog",
"elephant"
]
constructor() { }
ngOnInit() {
}
}
.example-list {
width: 500px;
max-width: 100%;
border: solid 1px #ccc;
min-height: 60px;
display: block;
background: white;
border-radius: 4px;
overflow: hidden;
}
<p>
Drag Source
</p>
<div id="source" cdkDropList [cdkDropListConnectedTo]="['destination']" class="example-list">
<ul>
<li cdkDrag [cdkDragData]="item" *ngFor="let item of data">
{{ item }}
</li>
</ul>
</div>
drop-destination-componentet.ts
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-drop-destination',
templateUrl: './drop-destination.component.html',
styleUrls: ['./drop-destination.component.css']
})
export class DropDestinationComponent implements OnInit {
data = []
constructor() { }
ngOnInit() {
}
drop(event) {
this.data.push(event.item.data);
}
}
.example-list {
width: 500px;
max-width: 100%;
border: solid 1px #ccc;
min-height: 60px;
display: block;
background: white;
border-radius: 4px;
overflow: hidden;
}
<p>
Destination Drop Zone
</p>
<div id="destination" class="example-list" style="height: 200px; border: 2px solid black" cdkDropList [cdkDropListConnectedTo]="['source']" (cdkDropListDropped)="drop($event)">
<ul>
<li *ngFor="let item of data">
{{ item }}
</li>
</ul>
</div>
Чтобы увидеть полное решение, пожалуйста, посетите stackblitz