我已经浏览了角度材料拖放的文档。它主要处理可以拖放到另一个具有列表的容器的元素列表。
我有一个要求,我将从菜单中拖动span
元素,它将转换为拖放容器中的img
。我可以将任意数量的span
元素拖放到同一个放置容器中。跨度应该是可重用的(不要从菜单列表中切断(。这可以用角度材料吗?请指教。
使用 Angular 材质是可能的。您只需要在放置容器中使用img
-元素并调整放置方法即可。看看这个调整后的角度材料示例
组件.ts
drop(event: CdkDragDrop<string[]>) {
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
console.log('Moved ' + event.container.data[event.previousIndex]);
} else {
const randomImageUrl = 'https://picsum.photos/seed/' + Math.floor(Math.random() * 100) + '/380/100';
this.doneImageSources.push(randomImageUrl);
console.log('Converted Item ' + event.item.data + ' to ' + randomImageUrl);
}
}
组件.html
<div class="example-container">
<h2>To do</h2>
<div
cdkDropList
#todoList="cdkDropList"
[cdkDropListData]="originItems"
[cdkDropListConnectedTo]="[doneList]"
class="example-list">
<div class="example-box" *ngFor="let item of originItems"
cdkDrag
[cdkDragData]="item">
{{item}}
</div>
</div>
</div>
<div class="example-container">
<h2>Done</h2>
<div
cdkDropList
#doneList="cdkDropList"
[cdkDropListData]="doneImageSources"
[cdkDropListConnectedTo]="[todoList]"
class="example-list"
(cdkDropListDropped)="drop($event)">
<img *ngFor="let imgSrc of doneImageSources"
[src]="imgSrc"
class="example-box"
alt="Random Image"
cdkDrag>
</div>
</div>
这是一个堆栈闪电战:https://stackblitz.com/edit/angular-wculyd
希望这有帮助! :-(