el-table 实现行拖拽排序

element ui 表格实现拖拽排序的功能,可以借助第三方插件Sortablejs来实现。

引入sortablejs

npm install sortablejs --save
组件中使用
import Sortable from 'sortablejs';
 <el-table ref="el-table":data="listData" row-key="id" style="width: 100%">
 </el-table>

注意:el-table一定要设置row-key,且row-key绑定的值唯一,不然拖拽可能乱序

 mounted() {
    this.initSort()
 },
 initSort() {
    const el = this.$refs['el-table'].$el.querySelector('.el-table__body-wrapper > table > tbody')
    let _this = this;
    const ops = {
       animation: 200, //动画时长
       handle: ".el-table__row", //可拖拽区域class
       //拖拽中事件
       onMove: ({ dragged, related }) => {
         const oldRow = _this.listData[dragged.rowIndex] //旧位置数据
         const newRow = _this.listData[related.rowIndex] //被拖拽的新数据
       },
       //拖拽结束事件
       onEnd: evt => {
         const curRow = _this.listData.splice(evt.oldIndex, 1)[0]
         _this.listData.splice(evt.newIndex, 0, curRow)
       }
    }
    Sortable.create(el, ops)
 },

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
el-table实现拖拽排序,可以通过以下步骤来实现: 1. 首先,确保你已经引入了element-ui库,并正确使用了el-table组件。 2. 在el-table中,给需要排序的列添加一个自定义的拖拽排序指令。可以使用vuedraggable或其他类似的拖拽库来实现。 3. 在自定义指令中,监听拖拽事件,获取拖拽的起始位置和目标位置。 4. 根据起始位置和目标位置,更新数据源中对应的数据项的顺序。 5. 在el-table中使用v-for指令遍历数据源,确保数据项的顺序与数据源一致。 下面是一个简单的示例代码: ```html <template> <el-table :data="tableData"> <el-table-column label="姓名" prop="name"> <template slot-scope="scope"> <div v-drag-sort class="drag-handle">{{ scope.row.name }}</div> </template> </el-table-column> <el-table-column label="年龄" prop="age"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 20 }, { name: '李四', age: 25 }, { name: '王五', age: 30 }, ], }; }, directives: { dragSort: { bind(el, binding, vnode) { const dragHandle = el.querySelector('.drag-handle'); dragHandle.addEventListener('dragstart', (event) => { event.dataTransfer.setData('text/plain', vnode.key); }); el.addEventListener('dragover', (event) => { event.preventDefault(); }); el.addEventListener('drop', (event) => { event.preventDefault(); const sourceKey = event.dataTransfer.getData('text/plain'); const targetKey = vnode.key; const sourceIndex = vnode.context.tableData.findIndex((item) => item.name === sourceKey); const targetIndex = vnode.context.tableData.findIndex((item) => item.name === targetKey); if (sourceIndex > -1 && targetIndex > -1) { const [removed] = vnode.context.tableData.splice(sourceIndex, 1); vnode.context.tableData.splice(targetIndex, 0, removed); } }); }, }, }, }; </script> ``` 这样,你就可以在el-table实现拖拽排序了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阁下何不同风起?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值