Solución:
Después de un día completo de investigación, encontré esta solicitud de extracción en el repositorio de Angular CDK en Github. Ahora, como no supe integrar cdkDropListGroup en mi ejemplo, decidí crear una matriz de ID que se agregarán a [cdkDropListConnectedTo].
Cada instancia de mi segunda lista habrá generado una ID, y esa ID se agregará a la matriz con el prefijo adecuado (en mi segunda lista, en cdkDropList):
<div cdkDropList
[attr.id]="addId(i, j)"
[cdkDropListData]="appointment.lessons"
[cdkDropListConnectedTo]="[subjectList]"
(cdkDropListDropped)="drop($event)"
>
addId método:
addId(i, j) {
this.LIST_IDS.push('cdk-drop-list-' + i + '' + j);
return i + '' + j;
}
(cdk-drop-list- es un prefijo de ID. CDK coloca este prefijo en cada elemento con el atributo cdkDropList)
Entonces, mi matriz se verá así:
- cdk-drop-list-00
- cdk-drop-list-01
- cdk-drop-list-02
- etc.
Ahora, paso esa matriz a [cdkDropListConnectedTo] en mi primera lista:
<div class="subj-container"
cdkDropListOrientation="horizontal"
cdkDropList
#subjectList="cdkDropList"
[cdkDropListData]="subjects"
[cdkDropListConnectedTo]="LIST_IDS"
(cdkDropListDropped)="drop($event)"
>
¡Y funciona perfectamente!
Espero que esto ayude a cualquiera con el mismo problema. Además, eche un vistazo a la solicitud de extracción que mencioné, mi solución es solo una solución, probablemente haya una mejor solución con cdkDropListGroup
Enlace de origen
Enlace de demostración
Para Listas dinámicas de arrastrar y soltar, podemos usar ID en lugar de # variables de plantilla
app.component.html
<div class="col-md-3" *ngFor="let week of weeks">
<div class="drag-container">
<div class="section-heading">Week {{week.id}}</div>
<div cdkDropList id="{{week.id}}" [cdkDropListData]="week.weeklist"
[cdkDropListConnectedTo]="connectedTo" class="item-list" (cdkDropListDropped)="drop($event)">
<div class="item-box" *ngFor="let weekItem of week.weeklist" cdkDrag>Week {{week.id}} {{weekItem}}</div>
</div>
</div>
</div>
app.component.ts
import { Component } from '@angular/core';
import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
weeks = [];
connectedTo = [];
constructor() {
this.weeks = [
{
id: 'week-1',
weeklist: [
"item 1",
"item 2",
"item 3",
"item 4",
"item 5"
]
}, {
id: 'week-2',
weeklist: [
"item 1",
"item 2",
"item 3",
"item 4",
"item 5"
]
}, {
id: 'week-3',
weeklist: [
"item 1",
"item 2",
"item 3",
"item 4",
"item 5"
]
}, {
id: 'week-4',
weeklist: [
"item 1",
"item 2",
"item 3",
"item 4",
"item 5"
]
},
];
for (let week of this.weeks) {
this.connectedTo.push(week.id);
};
}
drop(event: CdkDragDrop<string[]>) {
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex);
}
}
}
Con cdkDropListGroup ahora puede hacer:
<div cdkDropListGroup>
<div cdkDropList
[cdkDropListData]="data"
(cdkDropListDropped)="drop($event)">
<div class="row m-2">
<div *ngFor="let i of data cdkDrag>{{i}}</div>
</div>
</div>
<div class="subj-container"
cdkDropListOrientation="horizontal"
cdkDropList
#subjectList="cdkDropList"
[cdkDropListData]="subjects"
(cdkDropListDropped)="drop($event)">
</div>
</div>
Ya no es necesario cdkDropListConnectedTo en este caso. Ver https://github.com/angular/material2/blob/master/src/cdk/drag-drop/drag-drop.md