Angular material 角度拖放:拖放后不应从容器中移除项目

Angular material 角度拖放:拖放后不应从容器中移除项目,angular-material,angulardraganddroplists,Angular Material,Angulardraganddroplists,我使用的是角度拖放CDK: 我能够将物品从一个容器拖放到另一个容器,反之亦然。现在,我试图不从容器中删除掉的项目,但它应该掉到另一个容器中 正如您在图片中看到的,我想将一个项目从'to do'容器拖动到'Done'容器中 我想在掉落后保留一件物品 示例: 任何帮助,请…我认为使用棱角材料是不可能的。这里有一个可能的解决方案 <div class="example-box" *ngFor="let item of todo" cdkDrag>{{item}} <span (cl

我使用的是角度拖放CDK

我能够将物品从一个容器拖放到另一个容器,反之亦然。现在,我试图不从容器中删除掉的项目,但它应该掉到另一个容器中

正如您在图片中看到的,我想将一个项目'to do'容器拖动到'Done'容器中

我想在掉落后保留一件物品

示例:


任何帮助,请…

我认为使用棱角材料是不可能的。这里有一个可能的解决方案

<div class="example-box" *ngFor="let item of todo" cdkDrag>{{item}} <span (click)="copyMe(item)">Copy</span> </div>

Stackblitz:

我认为使用棱角材料是不可能的。这里有一个可能的解决方案

<div class="example-box" *ngFor="let item of todo" cdkDrag>{{item}} <span (click)="copyMe(item)">Copy</span> </div>

Stackblitz:

这很容易。只需使用copyArrayItem而不是transferArrayItem

import {
  CdkDragDrop,
  copyArrayItem,
  moveItemInArray
} from '@angular/cdk/drag-drop';

drop(event: CdkDragDrop<string[]>) {
    if (event.previousContainer === event.container) {
      moveItemInArray(
        event.container.data,
        event.previousIndex,
        event.currentIndex
      );
    } else {
      copyArrayItem(
        event.previousContainer.data,
        event.container.data,
        event.previousIndex,
        event.currentIndex
      );
    }
  }
导入{
CdkDragDrop,
copyArrayItem,
moveItemInArray
}来自“@angular/cdk/拖放”;
drop(事件:CdkDragDrop){
if(event.previousContainer==event.container){
moveItemInArray(
event.container.data,
event.previousIndex,
event.currentIndex
);
}否则{
复制阵列项目(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex
);
}
}

这很容易。只需使用copyArrayItem而不是transferArrayItem

import {
  CdkDragDrop,
  copyArrayItem,
  moveItemInArray
} from '@angular/cdk/drag-drop';

drop(event: CdkDragDrop<string[]>) {
    if (event.previousContainer === event.container) {
      moveItemInArray(
        event.container.data,
        event.previousIndex,
        event.currentIndex
      );
    } else {
      copyArrayItem(
        event.previousContainer.data,
        event.container.data,
        event.previousIndex,
        event.currentIndex
      );
    }
  }
导入{
CdkDragDrop,
copyArrayItem,
moveItemInArray
}来自“@angular/cdk/拖放”;
drop(事件:CdkDragDrop){
if(event.previousContainer==event.container){
moveItemInArray(
event.container.data,
event.previousIndex,
event.currentIndex
);
}否则{
复制阵列项目(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex
);
}
}

使用
copyArrayItem
而不是
transferArrayItem

更改:


使用
copyArrayItem
而不是
transferArrayItem

更改:


我认为用angulat材料是不可能的。你应该先复制一个你想移动的元素,然后再通过angulat材质移动我认为不可能的元素。您应该首先复制要移动的元素,然后移动副本谢谢您的回答!。我在寻找更好的方法。我不想复制项目。我只是简单地拖放,没有从容器中删除项目“要做”。谢谢你的回答!。我在寻找更好的方法。我不想复制项目。我只是简单地拖放,而不从容器“To do”中删除项目。有没有一种方法可以做到这一点,同时在拖动预览时保持原稿在原处?就像现在一样,你抓取它,它会从原始列表中临时删除,然后你将其删除,并添加到两个列表中。有没有办法防止它被临时删除?@user973223正在寻找相同的解决方案,是否有任何更新?有没有办法在拖动预览的同时保持原稿在原处?就像现在一样,你抓取它,它会从原始列表中临时删除,然后你将其删除,并添加到两个列表中。有没有办法防止它被临时删除?@user973223正在寻找相同的解决方案,是否有任何更新?
copyArrayItem(
    event.previousContainer.data,
    event.container.data,
    event.previousIndex,
    toIndex
);