element关于table拖拽排序问题

element关于table拖拽排序问题element关于table拖拽排序问题

大家好,又见面了,我是你们的朋友全栈君。

博客地址:http://www.globm.top/blog/1/detail/41
最近在使用element table的时候,经常会遇到排序的问题,如果只是简单的排序的话,element官方已经给出了指定的方法

//table的默认排序方式是按ID排序 顺序为递减 这里可以改成其它 比如 order
    <el-table :data="tableData" :default-sort="{prop: 'ID', order: 'descending'}">
      //设置sortable属性时出现排序按钮
      <el-table-column prop="ID" label="座号" sortable>
    </el-table>

但是,element官方组件并不支持拖拽排序,我在这里引入sortablejs实现拖拽排序的功能

  • sortablejs GitHub地址
//sortablejs GitHub地址
https://github.com/SortableJS/Sortable#readme
//安装sortable.js
Install with NPM:

$ npm install sortablejs --save

//在组件内引入
import Sortable from 'sortablejs'

//为需要拖拽排序的表格添加ref属性
<el-table  ref="dragTable">

//在数据渲染完毕添加拖拽事件
created(){ 
   
   this.getBanner()
},
methods:{ 
   
	async getBanner(val){ 
   
          await apiGetBanner().then((res)=>{ 
   
               this.bannerTable = res.data.data;
          })
         this.oldList = this.bannerTable.map(v => v.id);
         this.newList = this.oldList.slice();
         this.$nextTick(() => { 
   
             this.setSort()  //数据渲染完毕执行方法
         })
    }
    setSort() { 
   
        const el = this.$refs.dragTable.$el.querySelectorAll(
        		'.el-table__body-wrapper > table > tbody'
        )[0];
        this.sortable = Sortable.create(el, { 
   
        	// Class name for the drop placeholder,
        		ghostClass: 'sortable-ghost', 
                setData: function(dataTransfer) { 
   
                dataTransfer.setData('Text', '')
            },
           //拖拽结束执行,evt执向拖拽的参数
           onEnd: evt => { 
   
              //判断是否重新排序
              if(evt.oldIndex !== evt.newIndex){ 
   
                  let data = { 
   
                     id:this.bannerTable[evt.oldIndex].id,
                     banner_order:evt.newIndex
                  }
                  //数据提交失败则恢复旧的排序
                  apiPutBanner(data).catch(()=>{ 
   
                     const targetRow = this.bannerTable.splice(evt.oldIndex, 1)[0];
                     this.bannerTable.splice(evt.newIndex, 0, targetRow);
                  })
              }
            }
        })
    }
}

如果需要列拖拽的话,可以参考下面的代码,和上面是一样的原理,在这里我就不赘述了

//行拖拽
    rowDrop() { 
   
      const tbody = document.querySelector('.el-table__body-wrapper tbody')
      const _this = this
      Sortable.create(tbody, { 
   
        onEnd({ 
    newIndex, oldIndex }) { 
   
          const currRow = _this.tableData.splice(oldIndex, 1)[0]
          _this.tableData.splice(newIndex, 0, currRow)
        }
      })
    },
    //列拖拽
    columnDrop() { 
   
      const wrapperTr = document.querySelector('.el-table__header-wrapper tr')
      this.sortable = Sortable.create(wrapperTr, { 
   
        animation: 180,
        delay: 0,
        onEnd: evt => { 
   
          const oldItem = this.dropCol[evt.oldIndex]
          this.dropCol.splice(evt.oldIndex, 1)
          this.dropCol.splice(evt.newIndex, 0, oldItem)
        }
      })
    }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149205.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea代码编辑器_idea不会自动提示代码

    idea代码编辑器_idea不会自动提示代码介绍如何同时编辑一大块的代码(即如何让光标的位置同时停留在一大块代码行中)。

    2022年8月14日
    10
  • python表情代码_Python实现表情包的代码实例[通俗易懂]

    python表情代码_Python实现表情包的代码实例[通俗易懂]本文主要介绍了使用Python进行简单图像处理的方法以及Python自动生产表情包的实例,具有很好的参考价值,下面跟着小编一起来看下吧作为一个数据分析师,应该信奉一句话——“一图胜千言”。不过这里要说的并不是数据可视化,而是一款全民向的产品形态——表情包!!!!表情包不仅仅是一种符号,更是一种文化——是促进社交乃至社会发展的动力之一,就像懒。我们坚持认为,一张优秀的表情包,应该是一幅艺术品,是那忽…

    2025年6月29日
    0
  • vue的双向绑定原理_vue的双向绑定原理及实现

    vue的双向绑定原理_vue的双向绑定原理及实现前置:弟弟也是小白一个,看源码以小萌新角度分析可能适合一些跟我一样的小白去理解,有讲不对的请大佬多多海涵和指点首先我觉得理解vue双向绑定原理应该要有略懂一下发布订阅者模式,我略带过一下。与观察者模式不同的是,发布订阅者多了一个中间调度中心而已。下面给两个比较好的例子观察者模式:观察者(Observer)直接订阅(Subscribe)主题(Subject),而当主题被激活的时候,会触发(FireEvent)观察者里的事件(用网上比较好的例子,忘记作者链接了,如果打扰到您请联系我删了)。.

    2022年10月18日
    0
  • Java static变量保存在哪?

    Java static变量保存在哪?java-versionjavaversion&amp;amp;amp;amp;quot;1.8.0_171&amp;amp;amp;amp;quot;Java(TM)SERuntimeEnvironment(build1.8.0_171-b11)JavaHotSpot(TM)64-BitServerVM(build25.171-b11,mixedmode)//java-XX:+UseSerialGC-XX:-UseCompre…

    2022年7月16日
    13
  • 通信网络基础pdf_通信网络系统基础

    通信网络基础pdf_通信网络系统基础目录TCP通信概述服务端架构客户端架构应用层协议客户端连接服务端(错误示范)UDP通信概述程序结构通信数据处理TCP通信概述TCP通信双方在进行数据交换之前,先要建立连接,连接建立后,通信双方之间相当于有一条隧道,数据按顺序在该隧道中传输,数据传输完毕后,双方可以选择关闭隧道,连接结束。TCP通信编程中,“请求方”主动连接“被请求方”,该过…

    2022年9月21日
    1
  • Windows Subsystem for Android 安装<简化向>[通俗易懂]

    Windows Subsystem for Android 安装<简化向>[通俗易懂](总共安装时间≤1小时)能在Windows上运行安卓子系统还是第一次,既然Microsoft能开放给我们,那不妨尝试一下安装吧!

    2022年7月16日
    95

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号