elementui的table拖拽行
时间: 2025-03-17 19:20:36 浏览: 37
### 实现 ElementUI 表格组件的行拖拽排序功能
要在 ElementUI 的 `el-table` 组件中实现行拖拽排序功能,可以借助第三方库 **SortableJS** 来完成。以下是具体方法:
#### 1. 安装 SortableJS
首先需要安装 `sortablejs` 库,可以通过 npm 或 yarn 进行安装:
```bash
npm install sortablejs --save
```
#### 2. 引入并初始化 SortableJS
在 Vue 组件中引入 `sortablejs` 并对其进行配置。需要注意的是,在使用 `el-table` 的拖拽功能时,必须为其设置唯一的 `row-key` 属性[^2]。
以下是一个完整的代码示例:
```vue
<template>
<div>
<!-- el-table 需要绑定 ref 和 row-key -->
<el-table
ref="dragTable"
:data="tableData"
border
row-key="id">
<el-table-column prop="name" label="名称"></el-table-column>
<el-table-column prop="age" label="年龄"></el-table-column>
</el-table>
</div>
</template>
<script>
import Sortable from 'sortablejs';
export default {
data() {
return {
tableData: [
{ id: 1, name: '张三', age: 25 },
{ id: 2, name: '李四', age: 30 },
{ id: 3, name: '王五', age: 28 }
]
};
},
mounted() {
this.setSort();
},
methods: {
setSort() {
const el = this.$refs.dragTable.$el.querySelectorAll('.el-table__body-wrapper > table > tbody')[0];
this.sortable = Sortable.create(el, {
handle: '.handle', // 可选:指定可拖动区域
onEnd: ({ newIndex, oldIndex }) => {
const movedRow = this.tableData.splice(oldIndex, 1)[0]; // 移除旧位置的数据
this.tableData.splice(newIndex, 0, movedRow); // 插入新位置
}
});
}
}
};
</script>
<style scoped>
.handle {
cursor: move;
}
</style>
```
上述代码实现了以下几个要点:
- 使用 `ref="dragTable"` 获取表格实例。
- 设置 `row-key="id"` 确保每一行具有唯一标识符。
- 初始化 SortableJS,并监听 `onEnd` 事件来更新数据源中的顺序[^1]。
#### 3. 处理复杂场景下的拖拽需求
如果涉及树形结构或其他复杂的嵌套关系,则需先将树状数据转换为平铺数组后再应用拖拽逻辑。例如,通过自定义函数 `treeToTile` 转化数据[^4]。
---
###
阅读全文
相关推荐

















