【发布时间】:2020-05-04 00:52:02
【问题描述】:
我创建了 1 个带有图像的容器(使用 ngb-carousel)和 3 个放置这些图像的放置区,但是当我尝试在它们之间传输项目时遇到了一些问题。首先,每当我尝试将项目从我的图像容器移动到任何放置区域时,我总是得到相同的索引。
这是我的模板
<mat-card class="card">
<div
cdkDropList
#todoList="cdkDropList"
[cdkDropListData]="images"
[cdkDropListConnectedTo]="[doneList, intermedio, menos]"
cdkDropListOrientation="horizontal"
class="contenedor">
<ngb-carousel *ngIf="images">
<ng-template *ngFor="let img of images" ngbSlide>
<div class="picsum-img-wrapper" [cdkDragData]="img" cdkDrag>
<img [src]="path+img.imagen" width="100%" alt="Random first slide">
</div>
</ng-template>
</ngb-carousel>
</div>
<div class="results">
<div class="talents">
<div class="example-container">
<h4>(+) Talento más desarrollado</h4>
<div cdkDropList #doneList="cdkDropList" [cdkDropListData]="list2"
[cdkDropListConnectedTo]="[intermedio, menos]"
class="example-list" (cdkDropListDropped)="drop($event)">
<ol class="example-box">
<li *ngFor="let l2 of list2" [cdkDragData]="l2" cdkDrag>
{{l2.nombre}}
</li>
</ol>
</div>
</div>
</div>
<div class="talents">
<div class="example-container">
<h4>Talento Intermedio</h4>
<div cdkDropList #intermedio="cdkDropList" [cdkDropListData]="list3"
[cdkDropListConnectedTo]="[doneList, menos]"
class="example-list" (cdkDropListDropped)="drop($event)">
<ol class="example-box">
<li *ngFor="let l3 of list3" [cdkDragData]="l3" cdkDrag>
{{l3.nombre}}
</li>
</ol>
</div>
</div>
</div>
<div class="talents">
<div class="example-container">
<h4>(-) Talento menos desarrollado</h4>
<div cdkDropList #menos="cdkDropList" [cdkDropListData]="list4"
[cdkDropListConnectedTo]="[intermedio, doneList]"
class="example-list" (cdkDropListDropped)="drop($event)">
<ol class="example-box">
<li *ngFor="let l4 of list4" [cdkDragData]="l4" cdkDrag>
{{l4.nombre}}
</li>
</ol>
</div>
</div>
</div>
</div>
</mat-card>
这是我的拖放功能
drop(event: CdkDragDrop<any>) {
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);*/
const newArray = event.previousContainer.data.filter(e => e.id !== event.item.data.id);
event.previousContainer.data = newArray;
event.container.data.push(event.item.data)
}
}
我尝试使用 transferArrayItem,但它没有工作,因为我得到了错误的索引,所以我尝试更改 event.previousContainer.data 和 event.container.data,我使用 event.container.data 但它没有更改 event.previousContainer。数据。
任何想法为什么它不起作用? 提前致谢
【问题讨论】:
-
这个问题很复杂,如果不尝试就很难回答,所以提供一个 stackblitz 可能会激励更多的人加入。我有两个非常初始/通用的建议:1)创建单独的 @987654323 @ 用于不同放置目标的函数,这可能会消除选择正确目标列表时出现的错误 2) 检查您是否将数组内的索引与全局 ID 混合在一起。
-
您希望该图像始终保留在第一个容器中吗?
标签: javascript angular angular-material drag-and-drop