首页 > 其他分享 >vue+elementUI+sortablejs --- el-table列表拖拽

vue+elementUI+sortablejs --- el-table列表拖拽

时间:2022-08-29 12:12:05浏览次数:70  
标签:el vue elementUI oldIndex tbody sortablejs table 拖拽 newIndex

前言:

  最近很多需求都与拖拽有关,一般拖拽用的都是 vuedraggable 但是要是在el-table列表里面拖拽 当用vuedraggable去包裹table列表包外层只能拖动整个列表 包里面数据映射不上,然后就选用了我们今天的主角 sortablejs

步骤:

  安装:

    nmp: npm install sortablejs --save

    bower: bower install --save sortablejs  

  vue引入(其他的引入方法官方文档有):

    import Sortable from 'sortablejs'

  使用:

    

<el-table id="editRankingList" :data="tableData">
</el-table>

 

mounted() {
    this.rowDrop()
  }
  rowDrop() {
    const tbody = document.querySelector('#editRankingList .el-table__body-wrapper tbody')
    const _this = this
    Sortable.create(tbody, {
      animation: 180,
      delay: 0,
      onUpdate: (event) => {
        const oldIndex = event.oldIndex,
          newIndex = event.newIndex,
          $child = tbody.children[newIndex],
          $oldChild = tbody.children[oldIndex]
        // 先删除移动的节点
        tbody.removeChild($child)
        // 再插入移动的节点到原有节点,还原了移动的操作
        if (newIndex > oldIndex) {
          tbody.insertBefore($child, $oldChild)
        } else {
          tbody.insertBefore($child, $oldChild.nextSibling)
        }
        // 更新items数组
        const item = _this.tableData.splice(oldIndex, 1)
        _this.tableData.splice(newIndex, 0, item[0])
      }
    })
  }

 

因为如果不在onUpdate做处理 只会有个页面上的变化,数组源并没有变,我之前用的是直接重新去给tableData赋值强制给他更新(请求接口的情况下)最近我用的是KV配置全程前端写在这样去处理用户体验不好

所以采用了上面代码块的方法,提供方法的大佬:https://zhuanlan.zhihu.com/p/223090029

标签:el,vue,elementUI,oldIndex,tbody,sortablejs,table,拖拽,newIndex
From: https://www.cnblogs.com/qlb-7/p/16635513.html

相关文章

  • vue大文件分片上传插件
    ​文件夹数据库处理逻辑 public class DbFolder{    JSONObjectroot;       public DbFolder()    {        this.root= new J......
  • Mybatis-Plus使用@TableField实现自动填充日期
    一、前言我们在日常开发中经常使用ORM框架,比如Mybatis、tk.Mybatis、Mybatis-Plus。不过最广泛的还是Mybatis-Plus,我们的一些表,都会有创建时间、更新时间、创建人、更新人......
  • vue项目mixin.js的使用及注意详解
     简单的介绍下mixin(混入):官方介绍:混入(mixin)提供了一种非常灵活的方式,来分发Vue组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有......
  • Hello出行海量日志系统架构演进
    本文摘自我的公众号【陶朱公Boy】文章:《Hello出行海量日志系统架构演进》欢迎大家的关注!公众号回复关键字”日志“进行完整PPT文档的下载!Hello出行海量日志系统架构......
  • ELK日志管理平台的搭建
    ELK日志管理平台1>Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,可用来存储......
  • 动态获取部门(el-tree-select)自定义键名
    <el-tree-selectcheck-strictlysize="large":props="treeProps":data="datas.dataTree"v-model="d......
  • 057_末晨曦Vue技术_处理边界情况之强制更新和创建低开销的静态组件
    强制更新和创建低开销的静态组件点击打开视频讲解更加详细强制更新如果你发现你自己需要在Vue中做一次强制更新,99.9%的情况,是你在某个地方做错了事。你可能还没有留......
  • 第一个代码Hello World!
    HelloWorld新建一个文件夹,存放代码新建一个Java文件文件后缀为.java名为Hello.java[注意]要显示系统后缀名编写代码publicclassHello{public......
  • echarts-散点图-vue3-内阴影
      以上为效果图但是有一个问题是,一开始需要定义位置和颜色数组,当数据量过多的时候会重叠而且要提前声明很多数据后面我决定用关系图来做了,先放上散点图代码供参考f......
  • shell脚本LNMP
    #!/bin/bash#安装nginx服务#########安装nginx服务################systemctlstopfirewalldsystemctldisablefirewalldsetenforce0#安装依赖包yum-yinstal......