element-UI ,Table组件实现拖拽效果
2023-09-27 14:24:13 时间
拖拽效果,先放效果图,步骤放在后面~~
一、引入三方插件
1.引入sortable.js的包: npm install sortable.js --save
2.或者npm i -S vuedraggable
vuedraggable依赖 Sortable.js,所以下载了vuedraggable,我们便可以直接引入Sortable使用Sortable的特性。
vuedraggable是Sortable一种加强,实现组件化的思想,可以结合Vue,使用起来更方便
二、Sortable使用
在这里我们还是使用一句Sortable的构建方式
import Sortable from 'sortablejs';
三、实例
需要注意的是element table务必指定row-key,row-key必须是唯一的,如ID,不然会出现排序不对的情况。
<template>
<div style="width:800px">
<el-table :data="tableData"
border
row-key="id"
align="left">
<el-table-column v-for="(item, index) in col"
:key="`col_${index}`"
:prop="dropCol[index].prop"
:label="item.label">
</el-table-column>
</el-table>
<pre style="text-align: left">
{{dropCol}}
</pre>
<hr>
<pre style="text-align: left">
{{tableData}}
</pre>
</div>
</template>
<script>
import Sortable from 'sortablejs'
export default {
data() {
return {
col: [
{
label: '日期',
prop: 'date'
},
{
label: '姓名',
prop: 'name'
},
{
label: '地址',
prop: 'address'
}
],
dropCol: [
{
label: '日期',
prop: 'date'
},
{
label: '姓名',
prop: 'name'
},
{
label: '地址',
prop: 'address'
}
],
tableData: [
{
id: '1',
date: '2016-05-02',
name: '王小虎1',
address: '上海市普陀区金沙江路 100 弄'
},
{
id: '2',
date: '2016-05-04',
name: '王小虎2',
address: '上海市普陀区金沙江路 200 弄'
},
{
id: '3',
date: '2016-05-01',
name: '王小虎3',
address: '上海市普陀区金沙江路 300 弄'
},
{
id: '4',
date: '2016-05-03',
name: '王小虎4',
address: '上海市普陀区金沙江路 400 弄'
}
]
}
},
mounted() {
this.rowDrop()
this.columnDrop()
},
methods: {
//行拖拽
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)
}
})
}
}
}
</script>
四、补充说明
可以直接绑定从服务器查询到的结果,也可以动态绑定vueX里的数据,如要保存排序结果的话,则需要后台根据保存时的数据顺序进行保存
嗯。就酱~~
参考https://www.jianshu.com/p/6da3043aed2a
参考https://www.2cto.com/kf/201811/785039.html
相关文章
- Semantic-UI的React实现(四):基本元素组件的共通处理(父类)实现
- Semantic-UI的React实现(三):基本元素组件
- react native 调用原生UI组件
- [收藏]VUE优秀UI组件库合集
- 交互设计:隐藏或显示大段文本的UI组件有哪些?
- 是时候更新手里的武器了—Jetpack架构组件简析(上)
- vue+element ui项目总结点(四)零散细节概念巩固如vue父组件调用子组件的方法、拷贝数据、数组置空问题 等
- element ui select组件和table做分页完整功能和二级联动效果
- 基于 Vue.js 的移动端组件库mint-ui实现无限滚动加载更多
- 使用Vue CLI 3将基于element-ui二次封装的组件发布到npm
- Dynamics CRM2011 导入解决方案报根组件插入错误的解决方法
- 前端element-ui组件库el-card卡片【hover效果与点击事件(点击无效用@click.native=““)解决】
- DevExpress WinForms2020版本,多个组件和 UI 库
- Android组件化方案
- Flutter 跨组件状态共享
- 【Android 应用开发】UI绘制流程 ( 生命周期机制 | 布局加载机制 | UI 绘制流程 | 布局测量 | 布局摆放 | 组件绘制 | 瀑布流布局案例 )
- 【鸿蒙 HarmonyOS】UI 组件 ( 拖动条 Slider 组件 )
- 【鸿蒙 HarmonyOS】UI 组件 ( Text 组件 )
- android – 页面初始化时让组件得不到焦点
- vue里使用虚拟列表处理element-ui的el-select选择器组件数据量大时卡顿问题
- 【Vue 开发实战】基础篇 # 13:如何优雅地获取跨层级组件实例(拒绝递归)
- React Native 使用原生 UI 组件
- 组件改变生活_揭开Vue组件的神秘面纱
- 微信小程序 自定义组件
- uni-app项目中引入Vant UI组件库(完美避坑!!!)纯净版