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获取form表单值的代码
Jul 17 Javascript
入门基础学习 ExtJS笔记(一)
Nov 11 Javascript
jquery实现省市select下拉框的替换(示例代码)
Feb 22 Javascript
js实现屏幕自适应局部代码分享
Jan 30 Javascript
Backbone.js的Hello World程序实例
Jun 19 Javascript
javascript计时器编写过程与实现方法
Feb 29 Javascript
JavaScript中数组去除重复的三种方法
Apr 22 Javascript
jQuery代码实现表格中点击相应行变色功能
May 09 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
Feb 09 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
Sep 03 Javascript
vue项目中仿element-ui弹框效果的实例代码
Apr 22 Javascript
vue简单封装axios插件和接口的统一管理操作示例
Feb 02 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
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
教你如何用php实现LOL数据远程获取
2014/06/10 PHP
PHP小教程之实现双向链表
2014/06/12 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
异步加载script的代码
2011/01/12 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
2016/08/23 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
Python实现身份证号码解析
2015/09/01 Python
使用matplotlib画散点图的方法
2018/05/25 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
企业门卫岗位职责
2013/12/12 职场文书
小学门卫岗位职责
2013/12/17 职场文书
节约能源标语
2014/06/17 职场文书
我的中国心演讲稿
2014/09/04 职场文书
购房协议书范本(无房产证)
2014/10/07 职场文书
高中生旷课检讨书
2014/10/08 职场文书
win10更新失败无限重启解决方法
2022/04/19 数码科技
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python