ドラッグドロップの例を見てきましたが@angular/cdk
、ほとんどすべてがリストの並べ替えと、異なるリスト間でのアイテムのドラッグに関するものです。
アイテムのリスト (ファイルまたはフォルダーとして指定された各アイテム)があり、リストの1 つ以上のファイル アイテムをドラッグして、同じリスト内のフォルダーアイテム...そしてそこに移動します(もちろん、API呼び出しによって処理されます)。
そのため、通常の並べ替えの実装は機能しません (並べ替え可能なリスト内のアイテムは、ホバー時に邪魔にならないように移動します)。
SO に関するいくつかの質問をして、各項目を としてマークする必要があることを理解しましたcdkDropList
。だから、これはこれまでの私の実装です:
<div *ngFor="let item of items"
cdkDropList
[cdkDropListData]="[item]"
(cdkDropListDropped)="onDrop($event, item)"
>
<div class="test" cdkDrag>[{{item.type}}] {{item.name}}</div>
</div>
ただし、イベント データには、ドラッグされているアイテム (ファイル アイテム) に関する情報しかありません。以下のコードでは、、、event.previousContainer.data
およびevent.container.data
すべてitem
が同じオブジェクト (ドロップされるファイル項目) を参照しています。
onDrop(event: any, item: ItemData) {
console.log('drop event = ', event);
console.log('event.previousContainer.data = ', event.previousContainer.data);
console.log('event.container.data = ', event.container.data);
}
ここで正確に何が間違っているのか教えてください。ありがとう。
編集: これは stackblitz での複製です: https://stackblitz.com/edit/angular-ivy-edaftg