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 相关文章推荐
7个JS基础知识总结
Mar 05 Javascript
js实现延迟加载的方法
Jun 24 Javascript
JS如何判断json是否为空
Jul 06 Javascript
JS实现的添加弹出层并完成锁屏操作示例
Apr 07 Javascript
JavaScript 函数的定义-调用、注意事项
Apr 16 Javascript
Angular.Js中ng-include指令的使用与实现
May 07 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
Dec 06 Javascript
JS模拟实现哈希表及应用详解
May 04 Javascript
微信小程序获取音频时长与实时获取播放进度问题
Aug 28 Javascript
js作用域和作用域链及预解析
Apr 11 Javascript
微信小程序返回箭头跳转到指定页面实例解析
Oct 08 Javascript
Nest.js环境变量配置与序列化详解
Feb 21 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
hessian 在PHP中的使用介绍
2010/12/13 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
奇妙的js
2007/09/24 Javascript
JavaScript中的Window窗口对象
2008/01/16 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
python executemany的使用及注意事项
2017/03/13 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
2019/11/20 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
机械电子工程专业推荐信范文
2013/11/20 职场文书
公司行政经理岗位职责
2013/12/24 职场文书
个人委托书范本
2014/09/13 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
修辞手法有哪些?
2019/08/29 职场文书
关于Vue中的options选项
2022/03/22 Vue.js
R9700摩机记
2022/04/05 无线电