当前位置: 首页 > news >正文

实现 el-table 拖拽行排序,并获取当前拖拽行的数据传入服务器

背景

由于在项目中碰到需要实现 行 拖拽排序,使用的是element ui库,查阅资料后发现,现在的element ui库中的el-table还不支持行拖拽排序。于是查阅的很多资料,发现是可以使用 sortablejs 实现拖拽的,但是它的拖拽是基于dom的,没有数据改变,而且项目中需要获取当前拖拽行的数据传给后台。。这就有点伤脑筋了,sortablejs 的 drag事件不能获取当前拖拽行的数据,,网友有推荐vuedraggable 的,但是又不想破坏el-table,所有就另寻途径了。。。最终,找到一种了一种解决办法,推荐给大家,当然还有不足之处。。如果你有更好的解决办法,可以交流交流...

sortablejs 实现拖拽

废话不多,直接代码:

    mounted() {
        let el = document.querySelectorAll('.el-table__body-wrapper > table > tbody')[0];
        const sortable = Sortable.create(el, {
            onEnd: evt => { // 监听拖动结束事件
            
            }
        })
    }

具体参数大家可以查阅 sortablejs; 实现拖拽后我们就要获取当前拖拽行的数据了。。

vue 模版中添加事件

首先,我们要在el-table中添加事件:

<el-table :data="datas">
    <el-table-column type="selection" width="55">
        <template slot-scope="scope">
            <button draggable="true" class="move" @dragstart="handleEdit(scope.row)"></button>
        </template>
    </el-table-column>
    
    <el-table-column prop="name" label="名字" width="" sortable>
    </el-table-column>

    <el-table-column prop="name" label="名字" width="" sortable>
    </el-table-column>
    
</el-table>
复制代码

在type="selection" 行中添加一个拖拽的事件 draggable="true" 这个属性是要启用的

<button draggable="true" class="move" @dragstart="handleEdit(scope.row)"> 然后,到模版的js中定义 handleEdit 方法,获取需要的值,

    methods: {
      handleEdit(val) {
        console.log(val);
        this.id = val.id  //这里就是当前拖动行的值,把需要的值赋值给你之前定义好的就可以了
      }
    },
    mounted() {
      let el = document.querySelectorAll('.el-table__body-wrapper > table > tbody')[0];
      const sortable = Sortable.create(el, {
        onEnd: evt => {  //监听拖动结束事件
          let proId = this.id; //就是我们上面获取到当前行的id值
          console.log(evt.oldIndex) //当前行的被拖拽前的顺序
          console.log(evt.newIndex) //当前行的被拖拽后的顺序
          // 这里就可以写我们需要传给后台的逻辑代码
        }
      })
    }

局限性

鼠标在每一行的第一个元素上,拖动时才可以获取到当前行数据

如果你有更好的解决办法,还请你动一下你的小手,留言交流一下。。谢谢大家!

转载于:https://juejin.im/post/5c19aeeb6fb9a049ca374ad2

相关文章:

  • js的面向对象编程
  • GitLab在centos7上安装和使用
  • 外行人都能看得懂的机器学习,错过了血亏!
  • 合并两个DataSet的一种方法
  • springboot集成swagger
  • kentico中的page template的使用
  • 解决奇葩的win7文件不能拖动问题
  • layer
  • RSA加密算法的简单案例
  • 第二次作业
  • Oracle数据库入门——初级系列教程
  • CentOS 网络基础:(4)设置单网卡多IP
  • PostgreSQL 9.6 for Centos7.4 最佳实践安装
  • charles抓包工具
  • OpenSL ES
  • CentOS 7 防火墙操作
  • HTTP中GET与POST的区别 99%的错误认识
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • JAVA之继承和多态
  • leetcode46 Permutation 排列组合
  • node入门
  • PHP 小技巧
  • spring boot下thymeleaf全局静态变量配置
  • webpack4 一点通
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 区块链将重新定义世界
  • 世界上最简单的无等待算法(getAndIncrement)
  • 王永庆:技术创新改变教育未来
  • 异步
  • 用Visual Studio开发以太坊智能合约
  • 优化 Vue 项目编译文件大小
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 通过调用文摘列表API获取文摘
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #include到底该写在哪
  • #laravel 通过手动安装依赖PHPExcel#
  • #单片机(TB6600驱动42步进电机)
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (14)Hive调优——合并小文件
  • (ibm)Java 语言的 XPath API
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (一)appium-desktop定位元素原理
  • (转)memcache、redis缓存
  • (转)shell调试方法
  • (转)程序员技术练级攻略
  • (转)可以带来幸福的一本书
  • ./configure,make,make install的作用(转)
  • .bashrc在哪里,alias妙用
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .Net - 类的介绍
  • .Net 垃圾回收机制原理(二)
  • .NET设计模式(8):适配器模式(Adapter Pattern)