sortable+element 实现表格行拖拽的方法示例


Posted in Javascript onJune 07, 2019

背景

1、vue项目中的表格需要实现行拖拽功能

2、表格使用element组件库中el-table

方案介绍

Sortable.js

介绍:Sortable.js是一款轻量级的拖放排序列表的js插件

引用自官方文档:No jQuery required. Supports Meteor, AngularJS, React, Polymer, Vue, Knockout and any CSS library, e.g. Bootstrap.

参考地址: https://github.com/SortableJS/Sortable

vuedraggable
介绍:基于Sortable.js的vue组件,用以实现拖拽功能

引用自官方文档:Vue drag-and-drop component based on Sortable.js

参考地址: https://github.com/SortableJS/Vue.Draggable

遇到的问题
在使用vuedraggable的过程中,发现必须用<draggable></draggable>包裹拖动项的父级元素,但是element组件库对table进行封装,无法直接包裹拖动项(即tr)的父级元素

如果你的项目中,表格未使用组件库,实现可以参考 https://3water.com/article/162648.htm

解决方案

使用 sortable.js

步骤一: 安装

npm install vuedraggable

步骤二:引入

import Sortable from 'sortablejs';

@Component({
 components: {
  Sortable
 }
})

步骤三: el-table 添加row-key属性

<el-table
 ref="filterTable"
 row-key="ip" 
 @filter-change="handlerFilterChange" 
 class="cl-table" 
 :data="resourceList" 
 v-loading="resourceListLoading" 
 stripe style="width:100%;">
 <el-table-column
   prop="name"
  label="主机名" 
  :min-width="150" 
  show-overflow-tooltip>
 </el-table-column>
 </el-table>

步骤四 : 将拖拽元素设置为要拖动项的父级元素

mounted() {
   // 表格中需要实现行拖动,所以选中tr的父级元素
  const table = document.querySelector('.el-table__body-wrapper tbody')
  const self = this
  Sortable.create(table, {
   onEnd({ newIndex, oldIndex }) {
    console.log(newIndex, oldIndex)
    const targetRow = self.resourceList.splice(oldIndex, 1)[0]
    self.resourceList.splice(newIndex, 0, targetRow)
   }
  })
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
Aug 19 Javascript
myeclipse安装jQuery插件的方法
Mar 29 Javascript
JavaScript 原型继承
Dec 26 Javascript
浅谈JavaScript中的作用域和闭包问题
Jul 07 Javascript
jQuery实现文件上传进度条特效
Aug 12 Javascript
简单纯js实现点击切换TAB标签实例
Aug 23 Javascript
javascript拖拽效果延伸学习
Apr 04 Javascript
jQuery EasyUI菜单与按钮详解
Jul 13 Javascript
jQuery表单验证插件解析(推荐)
Jul 21 Javascript
详解Webpack多环境代码打包的方法
Aug 03 Javascript
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
js正则匹配markdown里的图片标签的实现
Mar 24 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
Jun 07 #Javascript
Vue中实现权限控制的方法示例
Jun 07 #Javascript
vue 父组件中调用子组件函数的方法
Jun 06 #Javascript
通过seajs实现JavaScript的模块开发及按模块加载
Jun 06 #Javascript
小试小程序云开发(小结)
Jun 06 #Javascript
怎么使用javascript深度拷贝一个数组
Jun 06 #Javascript
微信小程序如何使用globalData的方法
Jun 06 #Javascript
You might like
thinkPHP实现瀑布流的方法
2014/11/29 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
为输入框加入数字js校验代码分享
2017/11/02 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
Python单例模式实例详解
2017/03/01 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
python 简单照相机调用系统摄像头实现方法 pygame
2018/08/03 Python
Numpy之文件存取的示例代码
2018/08/03 Python
对Xpath 获取子标签下所有文本的方法详解
2019/01/02 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
Python中and和or如何使用
2020/05/28 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
Levi’s西班牙官方网站:李维斯,著名的牛仔裤品牌
2020/08/20 全球购物
数据库的约束含义
2012/09/09 面试题
英文自荐信
2013/12/19 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
教师旷工检讨书
2015/08/15 职场文书
ES6 解构赋值的原理及运用
2021/05/25 Javascript
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
python实现简单的聊天小程序
2021/07/07 Python