angular/cdk 使用 ngFor 的简单拖动不适用于 div
angular/cdk simple drag not working for div with ngFor
我需要使用 angular-cdk 使项目可拖动。我在应用程序模块中导入了 DragDropModule。我在 ngFor 中应用 cdkDrag。
<div *ngIf="messages.length" >
<div
*ngFor="let message of messages" cdkDrag>
<strong>{{ message }}</strong>
</div>
</div>
拖动没有按预期工作,控制台中也没有出现错误。拖动功能适用于普通 div 元素。
您应该将 cdkDropList
添加到您的外部 div,以及一个放置事件。
component.html
<div cdkDropList (cdkDropListDropped)="drop($event)" *ngIf="messages.length" >
<div
*ngFor="let message of messages" cdkDrag>
<strong>{{ message }}</strong>
</div>
</div>
component.ts
drop(event: CdkDragDrop<string[]>) {
moveItemInArray(this.messages, event.previousIndex, event.currentIndex);
}
除了M. Doe的回答外,我还必须做以下事情:
将以下内容添加到我的 app.module.ts 文件中:
import { DragDropModule } from '@angular/cdk/drag-drop';
...
imports:
[
DragDropModule
]
将 cdkDropListData 参数添加到包含要排序的项目列表的父元素:
<div cdkDropList [cdkDropListData]="messages" (cdkDropListDropped)="drop($event) *ngIf="messages.length" >
<div
*ngFor="let message of messages" cdkDrag>
<strong>{{ message }}</strong>
</div>
</div>
在我的案例中,从 cdkDrag 元素中删除 class
属性修复了拖放问题。
- 您应该将 DragDropModule 添加到声明组件的模块中
- *ngFor 指令适用于不带 cdkDropList 的 cdkDrag 指令
我需要使用 angular-cdk 使项目可拖动。我在应用程序模块中导入了 DragDropModule。我在 ngFor 中应用 cdkDrag。
<div *ngIf="messages.length" >
<div
*ngFor="let message of messages" cdkDrag>
<strong>{{ message }}</strong>
</div>
</div>
拖动没有按预期工作,控制台中也没有出现错误。拖动功能适用于普通 div 元素。
您应该将 cdkDropList
添加到您的外部 div,以及一个放置事件。
component.html
<div cdkDropList (cdkDropListDropped)="drop($event)" *ngIf="messages.length" >
<div
*ngFor="let message of messages" cdkDrag>
<strong>{{ message }}</strong>
</div>
</div>
component.ts
drop(event: CdkDragDrop<string[]>) {
moveItemInArray(this.messages, event.previousIndex, event.currentIndex);
}
除了M. Doe的回答外,我还必须做以下事情:
将以下内容添加到我的 app.module.ts 文件中:
import { DragDropModule } from '@angular/cdk/drag-drop';
...
imports:
[
DragDropModule
]
将 cdkDropListData 参数添加到包含要排序的项目列表的父元素:
<div cdkDropList [cdkDropListData]="messages" (cdkDropListDropped)="drop($event) *ngIf="messages.length" >
<div
*ngFor="let message of messages" cdkDrag>
<strong>{{ message }}</strong>
</div>
</div>
在我的案例中,从 cdkDrag 元素中删除 class
属性修复了拖放问题。
- 您应该将 DragDropModule 添加到声明组件的模块中
- *ngFor 指令适用于不带 cdkDropList 的 cdkDrag 指令