Вам необходимо использовать опцию cdkDropListConnectedTo
в неназначенных списках студентов и добавить все экземпляры списков столов. Это потому, что CdkDropListGroup
смотрит только на списки братьев и сестер, а не на детей:
Вам нужно добавить ссылку на шаблон в свой рабочий список, так что вы можете запросить это в компоненте ts, или вы можете использовать a строка идентификаторов. Я думаю, что ссылка на шаблон более универсальна, но для примера я буду использовать идентификаторы:
<div cdkDropList
id="{{studentList.listName}}"
[cdkDropListData]="studentList.student"
class="example-list"
(cdkDropListDropped)="returnStudent($event)"
[cdkDropListEnterPredicate]="userReturnPredicate"
[cdkDropListConnectedTo]="desks">
<div *ngFor="let person of studentList.student"
class="example-box"
cdkDrag
[cdkDragData]="person">
{{person.userName}}
</div>
</div>
Как вы можете видеть, cdkDropListConnectedTo
имеет desks
в привязке. В вашем компоненте вы можете определить столы следующим образом:
desks: string[] = [];
this.desks = this.projectLists.map(
(list) => list.products.map((product) => product.productName)
).flat(2);
Чтобы он работал с ViewChildren
, вам нужно что-то подобное в вашем ngAfterViewInit
:
ngAfterViewInit(): void {
this.deskLists.changes.pipe(
startWith(true),
tap(() => {
this.desks = this.deskLists.toArray();
this.cd.markForCheck();
this.cd.detectChanges();
}),
).subscribe();
}
рабочий пример