如果您使用的是 Angular,我假设是因为使用了 Nebular,请查看此页面关于使用 Angular cdk 拖放指令:
https://v7.material.angular.io/cdk/drag-drop/api
它与 Nebular Tree Grid 一起玩得很好而且相当简单,下面是添加拖放到 nbTreeGrid 的代码如下所示:
<table [nbTreeGrid]="_tableData" cdkDropList
(cdkDropListDisabled)="!draggable" cdkDropListLockAxis="y"
(cdkDropListSorted)="onDrag($event)
(cdkDropListDropped)="onDrop($event)">
<tr cdkDrag nbTreeGridRow
*nbTreeGridRowDef="let row; let i = index; columns: _tableDataColumns"
[cdkDragData]="{index: i, data: row.data}">
</tr>
编辑:注意tr 上的[cdkDragData]。我在我的控制器中使用它来知道哪个元素被丢弃而不是其他元素。由于我们从放置事件中得到的只是被拖动项目的当前和前一个索引,因此我们需要跟踪表中每一行的当前索引。我找不到从NbTreeGridDataSource 获取此信息的其他方法。这里有一些控制器代码可以给你一个想法
import { CdkDrag } from '@angular/cdk/drag-drop'
@Component()
export class DropListComponent {
// we'll need to access all drag items to get their dragData
@ViewChildren(CdkDrag) private rows: QueryList<CdkDrag>;
// this is called during drag every time list elements are rearranged
onDrag(event) {
const {index: sourceId, data: sourceData} = event.item.data
const target = this.rows.find(el=> el.data.index == event.currentIndex).data
const {index: targetId, data: targetData} = target
console.log(`Dropped items ${sourceId} to ${targetId}.`)
console.log('SOURCE', sourceData)
console.log('TARGET', targetData)
}
}