河豚随心记(五)vue项目使用element-ui el-table 实现拖拽排序

前言

使用一个强大的第三方js库sortable.js来实现

步骤

1.直接npm安装npm install sortablejs --save
2.装完之后在要使用的页面引入import Sortable from 'sortablejs'
3.在el-table标签挂载完成后使用sortablejs库,我这里是在mounted里面,因为我的el-table是页面初始化的时候挂载的:

<el-table  ref="dragTable" row-key="filedId" :data="tableData">
            <el-table-column
              label=""
              width="60"
              align="center"
              class-name="allowDrag"
              >
              <template slot-scope="scope">
                <div class="flex-box-between-column drag-btn">
                  <span></span>
                  <span></span>
                  <span></span>
                </div>
              </template>
            </el-table-column>
            <el-table-column label="序号" type="index" align="center" width="50" />
            <el-table-column label="项目名称" align="center" prop="fieldName"/>
            <el-table-column label="项目类型" align="center" prop="dataType"></el-table-column>
            
</el-table>
mounted() {
    const el = this.$refs.dragTable.$el.querySelectorAll(".el-table__body-wrapper > table > tbody")[0];
    const sortable = Sortable.create(el, {
      handle: ".allowDrag",
      onEnd: evt => {
        const targetRow = this.tableData.splice(evt.oldIndex, 1)[0];
        this.tableData.splice(evt.newIndex, 0, targetRow);
        for (let index in this.tableData) {
          this.tableData[index].sort = parseInt(index) + 1;
        }
      }
    });
  },

这样一个最基础可拖拽的el-table就实现了,这里解释一下代码里面的几个变量的使用

html标签

首先el-table标签里要加上ref属性,方便js选中;
row-key要为表格数据的唯一标识,且一定要有值,如果没有的话拖拽功能会异常;
然后是设置拖拽识别列,即长按哪一列的时候可以进行拖拽,我这里是新增了一个拖拽按钮列:
在这里插入图片描述
你们也可以设置成其他列或者直接设置为序号列,设置拖拽识别列:给el-table-column标签加个属性class-name="allowDrag"即可

JS部分

el就是选中的整个表格的tbody了:
在这里插入图片描述
handle的值就是刚刚class-name属性里面的值,注意是类名,所以前面要加个点,.allowDrag;
onEnd是拖拽后鼠标放开事件,把this.tableData换成你们自己的表格数据源;
我这里数据源是用字段sort排序的把.sort改成你们表格数据源的排序字段名即可。
其他不用改,按照以上改完即可使用。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值