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 相关文章推荐
extjs 学习笔记 四 带分页的grid
Oct 20 Javascript
JS编程小常识很有用
Nov 26 Javascript
JavaScript面向对象编程入门教程
Apr 16 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
Jun 15 Javascript
JQuery Tips相关(1)----关于$.Ready()
Aug 14 Javascript
JQuery实现防止退格键返回的方法
Feb 12 Javascript
AngularJS基础 ng-click 指令示例代码
Aug 01 Javascript
vue系列之动态路由详解【原创】
Sep 10 Javascript
vue 简单自动补全的输入框的示例
Mar 12 Javascript
js Element Traversal规范中的元素遍历方法
Apr 19 Javascript
vue - vue.config.js中devServer配置方式
Oct 30 Javascript
微信小程序swiper左右扩展各显示一半代码实例
Dec 05 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
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
php中in_array函数用法分析
2014/11/15 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
php里array_work用法实例分析
2015/07/13 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
实例解析js中try、catch、finally的执行规则
2017/02/24 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
2017/07/07 Javascript
ES6中Array.find()和findIndex()函数的用法详解
2017/09/16 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
Python3 处理JSON的实例详解
2017/10/29 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
施工安全责任书
2014/04/14 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
Python基础之hashlib模块详解
2021/05/06 Python
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python
Nginx跨域问题解析与解决
2022/08/05 Servers