《ElementUI/Plus 基础知识》el-table + sortablejs 实现 row 拖动改变顺序(Vue2/3适用)

news/2024/9/20 5:08:36 标签: elementui, 前端, javascript

前言

使用如下技术:

  • ElementPlus Table 组件;
  • 插件 sortablejs ( npmjs/Github 地址);

实现

html

  • 代码第 1 行,属性 row-key 一定要设置,否则会报错。即行数据的 Key,用来优化 table 的渲染;
  • 如果想看效果,请异步 《ElementUI/Plus 踩坑》el-table + sortablejs 拖拽顺序错乱;
<el-table class="my-table" :data="tableData" style="width: 100%" row-key="id">
    <el-table-column prop="date" label="Date" width="180" />
    <el-table-column prop="name" label="Name" width="180" />
    <el-table-column prop="address" label="Address" />
</el-table>

JavaScript

  • 代码第 1 行,引入插件 sortablejs
  • 代码第 3 行,获取标签 tbody,注意是表格 row 元素列表的上一级;
  • 代码第 6 行,监听 row 元素拖动结束事件 onEnd。且获取元素的原始索引 oldIndex新索引 newIndex
  • 代码第 9 - 12 行,原始数据不会修改,所以要在此修改;
import Sortable from 'sortablejs'

const el = document.querySelector('.my-table tbody');
const that = this;
Sortable.create(el, {
    onEnd({ newIndex, oldIndex }) {
        let arr = that.tableData;

        // 获取移动的 item
        const dragItem = arr.splice(oldIndex, 1)[0];
        // 插入新位置
        arr.splice(newIndex, 0, dragItem);
    }
});

完成代码

<template>
    <el-table class="my-table" :data="tableData" style="width: 100%" row-key="id">
      <el-table-column prop="date" label="Date" width="180" />
      <el-table-column prop="name" label="Name" width="180" />
      <el-table-column prop="address" label="Address" />
    </el-table>
  </template>

<script>
import Sortable from 'sortablejs'
export default {
    data() {
        return {
            tableData: [
                {
                    id: 'ID_001',
                    date: '2004-01-01',
                    name: 'Tom11111',
                    address: 'No. 001, Grove St, Los Angeles',
                },
                {
                    id: 'ID_002',
                    date: '2014-01-02',
                    name: 'Tom22222',
                    address: 'No. 002, Grove St, Los Angeles',
                },
                {
                    id: 'ID_003',
                    date: '2024-01-03',
                    name: 'Tom33333',
                    address: 'No. 003, Grove St, Los Angeles',
                },
                {
                    id: 'ID_004',
                    date: '2034-01-04',
                    name: 'Tom44444',
                    address: 'No. 004, Grove St, Los Angeles',
                },
                {
                    id: 'ID_005',
                    date: '2044-01-05',
                    name: 'Tom55555',
                    address: 'No. 005, Grove St, Los Angeles',
                },
                {
                    id: 'ID_006',
                    date: '2054-01-06',
                    name: 'Tom66666',
                    address: 'No. 006, Grove St, Los Angeles',
                },
            ]
        }
    },
    methods: {  
        initDrag() {
            const el = document.querySelector('.my-table tbody');
            const that = this;
            Sortable.create(el, {
                onEnd({ newIndex, oldIndex }) {
                    let arr = that.tableData;

                    // 获取移动的 item
                    const dragItem = arr.splice(oldIndex, 1)[0];
                    // 插入新位置
                    arr.splice(newIndex, 0, dragItem);

                }
            });
        }
    },
    mounted() {
        this.$nextTick(()=>{
            this.initDrag()
        })
    },
}
</script>

效果

在这里插入图片描述


http://www.niftyadmin.cn/n/5666564.html

相关文章

图像处理-掩码

文章目录 一、简介二、主要用途三、代码实现四、掩码优缺点1.优点2.缺点 一、简介 在图像处理中&#xff0c;掩码&#xff08;Mask&#xff09;是一种特殊的图像&#xff0c;用于指定对原始图像进行操作的区域。掩码通常是二值图像&#xff08;即图像上的每个像素只有两个可能…

PWN二进制安全修仙秘籍【第一章#工具篇02】GDB的使用及pwndbg插件安装

很多人在学习新知识之前都不喜欢研究理论、原理&#xff0c;我觉得这是大错特错的&#xff01;&#xff01;&#xff01; 所以 在学习GDB的使用之前&#xff0c;我们先来学习一下GDB的组成 1. GDB的组成 下面这张图就是GDB的组成架构&#xff0c;是不是很抽象哩&#xff0c…

Vue Router 编程式导航全攻略:深入掌握 push, replace, go, back, forward,beforeEach 方法

Vue Router 编程式导航全攻略&#xff1a;深入掌握 push, replace, go, back, forward,beforeEach 方法 在Vue Router中&#xff0c;编程式导航是一种通过JavaScript代码来实现路由跳转的方法。与声明式导航&#xff08;使用<router-link>标签&#xff09;相比&#xff…

企业网络安全关键:防御措施和应急响应

感谢浪浪云支持发布 浪浪云活动链接 &#xff1a;https://langlangy.cn/?i8afa52 文章目录 什么是网络安全常见的网络安全威胁病毒和恶意软件网络钓鱼拒绝服务攻击中间人攻击社会工程学 基本的网络安全措施强密码策略双因素认证安装和更新防病毒软件定期备份 高级的网络安全方…

【机器学习(八)】分类和回归任务-因子分解机(Factorization Machines,FM)-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理&#xff08;一&#xff09; FM表达式&#xff08;二&#xff09;时间复杂度&#xff08;三&#xff09;回归和分类 三、算法优缺点&#xff08;一&#xff09;优点&#xff08;二&#xff09;缺点 四、FM分类任务实现对比&#xff08;一&…

【Python机器学习】NLP信息提取——值得提取的信息

目录 提取GPS信息 提取日期 如下一些关键的定量信息值得“手写”正则表达式&#xff1a; GPS位置&#xff1b;日期&#xff1b;价格&#xff1b;数字。 和上述可以通过正则表达式轻松捕获的信息相比&#xff0c;其他一些重要的自然语言信息需要更复杂的模式&#xff1a; 问…

计算机视觉(CV)技术是指计算机系统通过模拟人类视觉系统来识别、理解和解释图像和视频的能力。它可以在各种领域中发挥巨大作用,但也面临一些挑战。

文章目录 计算机视觉(Computer Vision, CV)技术的优势与挑战引言一、计算机视觉技术的优势1. 提高效率与精度2. 自动化与无人操作3. 实时监控与智能分析4. 节省人力成本5. 个性化体验二、计算机视觉技术的挑战1. 数据需求量大2. 复杂环境中的鲁棒性3. 深度学习模型的可解释性…

JAVA基础面试题总结(十五)——设计模式

面试专题-设计模式 前言 在平时的开发中&#xff0c;涉及到设计模式的有两块内容&#xff0c;第一个是我们平时使用的框架&#xff08;比如spring、mybatis等&#xff09;&#xff0c;第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中&#…