el-table动态增加列、行数据,俩种方法实现按需选择

需求:

表格数据过多的时候,需要实现动态选择数据的功能,有俩种方法可以按需选择,解决了表格动态选择时闪屏数据抖动问题。

注意,这个添加数据是tableData原本就有的,我做的这个操作类似就是折叠选择展示原有的数据

1.实现表格数据居中

2.动态添加内容

3.解决表格添加数据后闪屏功能

4.解决了el-dropdown-menu点击后自动关闭问题

1.效果1

使用了el-dropdown嵌套el-checkbox-group实现

2.效果2

使用了el-select的多选实现

3.主要代码讲解

:hide-on-click="false":点击菜单后不隐藏菜单

  <el-dropdown :hide-on-click="false">
                            <span class="el-dropdown-link"> 地址<i class="el-icon-arrow-down el-icon--right"></i> </span>
                            <el-dropdown-menu slot="dropdown">
                                <el-dropdown-item>
                                    <el-checkbox-group
                                        style="display: flex; flex-direction: column"
                                        v-model="checkList"
                                        @change="selectOptions"
                                    >
                                        <el-checkbox :label="item.label" v-for="item in options" :key="item.value"></el-checkbox>
                                    </el-checkbox-group>
                                </el-dropdown-item>
                            </el-dropdown-menu>
                        </el-dropdown>
3.1:添加数据后窗口抖动解决代码

1.在el-table添加ref='table'

2.每次数据加载完重新渲染表格

    beforeUpdate() {
        this.$nextTick(() => {
            //在数据加载完,重新渲染表格
            this.$refs['table'].doLayout();
        });
    }
3.2 数据筛选

根据选择值进行数据筛选,之后再和原有数据进行比对,最后把数据添加到表格数据中实现

   selectOptions(val) {
            console.log(val, '数据');
            this.tableFilter = [];
            let filter = this.options.filter((item) => val.includes(item.label));
            // let filter = this.options.filter((item) => val.includes(item.value));
            console.log(filter, '多选数据');
            filter.forEach((item) => {
                this.tableFilter.push({
                    prop: item.value,
                    label: item.label
                });
            });
        }

4.效果1完整代码

<template>
    <div class="content-box">
        <div class="container">
            <h3>测试</h3>
            <el-table
                ref="table"
                :data="tableData"
                style="width: 100%"
                :header-cell-style="{ 'text-align': 'center' }"
                :cell-style="{ 'text-align': 'center' }"
            >
                <el-table-column prop="date" label="日期" width="180"> </el-table-column>
                <el-table-column prop="name" label="姓名" width="180"> </el-table-column>
                <el-table-column width="250" prop="address">
                    <template slot="header" slot-scope="scope">
                        <el-dropdown :hide-on-click="false">
                            <span class="el-dropdown-link"> 地址<i class="el-icon-arrow-down el-icon--right"></i> </span>
                            <el-dropdown-menu slot="dropdown">
                                <el-dropdown-item>
                                    <el-checkbox-group
                                        style="display: flex; flex-direction: column"
                                        v-model="checkList"
                                        @change="selectOptions"
                                    >
                                        <el-checkbox :label="item.label" v-for="item in options" :key="item.value"></el-checkbox>
                                    </el-checkbox-group>
                                </el-dropdown-item>
                            </el-dropdown-menu>
                        </el-dropdown>
                    </template>
                </el-table-column>
                <el-table-column
                    v-for="(header, index) in tableFilter"
                    :key="header.prop"
                    :prop="header.prop"
                    :label="header.label"
                    width="120px"
                ></el-table-column>
            </el-table>
        </div>
    </div>
</template>

<script>
export default {
    data() {
        return {
            checkList: [],
            tableData: [
                {
                    date: '2016-05-02',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1518 弄',
                    age: 19,
                    sex: '男'
                },
                {
                    date: '2016-05-04',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1517 弄',
                    age: 17,
                    sex: '女'
                },
                {
                    date: '2016-05-01',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1519 弄',
                    age: 20,
                    sex: '男'
                },
                {
                    date: '2016-05-03',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1516 弄',
                    age: 20,
                    sex: '女'
                }
            ],
            options: [
                {
                    value: 'age',
                    label: '年龄'
                },
                {
                    value: 'sex',
                    label: '女'
                }
            ],
            value1: [],
            value2: [],
            tableFilter: []
        };
    },
    methods: {
        // 查询
        selectOptions(val) {
            console.log(val, '数据');
            this.tableFilter = [];
            let filter = this.options.filter((item) => val.includes(item.label));
            // let filter = this.options.filter((item) => val.includes(item.value));
            console.log(filter, '多选数据');
            filter.forEach((item) => {
                this.tableFilter.push({
                    prop: item.value,
                    label: item.label
                });
            });
        }
    },
    beforeUpdate() {
        this.$nextTick(() => {
            //在数据加载完,重新渲染表格
            this.$refs['table'].doLayout();
        });
    }
};
</script>

<style lang="scss" scoped>
.box {
    display: flex;
    width: 500px;
    height: 500px;
    border: 1px solid red;
    .box_left {
        background-color: #ddd;
    }
}
</style>

5.效果2完整代码

<template>
    <div class="content-box">
        <div class="container">
            <h3>测试</h3>
            <el-table
                ref="table"
                :data="tableData"
                style="width: 100%"
                :header-cell-style="{ 'text-align': 'center' }"
                :cell-style="{ 'text-align': 'center' }"
            >
                <el-table-column prop="date" label="日期" width="180"> </el-table-column>
                <el-table-column prop="name" label="姓名" width="180"> </el-table-column>
                <el-table-column width="250" prop="address">
                    <template slot="header" slot-scope="scope">
                        <div style="display: flex; align-items: center">
                            <div style="width: 60px">地址</div>
                            <el-select
                                v-model="value2"
                                multiple
                                collapse-tags
                                style="margin-left: 20px"
                                @change="selectOptions"
                                placeholder="请选择"
                            >
                                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
                            </el-select>
                        </div>
                    </template>
                </el-table-column>
                <el-table-column
                    v-for="(header, index) in tableFilter"
                    :key="header.prop"
                    :prop="header.prop"
                    :label="header.label"
                    width="120px"
                ></el-table-column>
            </el-table>
        </div>
    </div>
</template>

<script>
export default {
    data() {
        return {
            checkList: [],
            tableData: [
                {
                    date: '2016-05-02',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1518 弄',
                    age: 19,
                    sex: '男'
                },
                {
                    date: '2016-05-04',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1517 弄',
                    age: 17,
                    sex: '女'
                },
                {
                    date: '2016-05-01',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1519 弄',
                    age: 20,
                    sex: '男'
                },
                {
                    date: '2016-05-03',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1516 弄',
                    age: 20,
                    sex: '女'
                }
            ],
            options: [
                {
                    value: 'age',
                    label: '年龄'
                },
                {
                    value: 'sex',
                    label: '女'
                }
            ],
            value1: [],
            value2: [],
            tableFilter: []
        };
    },
    methods: {
        // 查询
        selectOptions(val) {
            console.log(val, '数据');
            this.tableFilter = [];
            let filter = this.options.filter((item) => val.includes(item.value));
            console.log(filter, '多选数据');
            filter.forEach((item) => {
                this.tableFilter.push({
                    prop: item.value,
                    label: item.label
                });
            });
        }
    },
    beforeUpdate() {
        this.$nextTick(() => {
            //在数据加载完,重新渲染表格
            this.$refs['table'].doLayout();
        });
    }
};
</script>

<style lang="scss" scoped>
.box {
    display: flex;
    width: 500px;
    height: 500px;
    border: 1px solid red;
    .box_left {
        background-color: #ddd;
    }
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/112184.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Docker Compose部署Spug并实现内网穿透远程访问

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

产品经理一定要学会的原型交互规范设计

一、主级按钮 序号1、序号2&#xff1a;主级按钮 一个按钮区最多一个主级按钮&#xff0c;也可以没有 二、线框按钮 序号3&#xff1a;如果不是非常为了突出“完成”、“推荐”的操作&#xff0c;可以多采用线框按钮 三、红色按钮 序号4&#xff1a;红色按钮不需要选中颜色这…

音视频rtsp rtmp gb28181在浏览器上的按需拉流

按需拉流是从客户视角来看待音视频的产品功能&#xff0c;直观&#xff0c;好用&#xff0c;为啥hls flv大行其道也是这个原因&#xff0c;不过上述存在的问题是延迟没法降到实时毫秒级延迟&#xff0c;也不能随心所欲的控制。通过一段时间的努力&#xff0c;结合自己闭环技术栈…

没搞错吧?阿里云99元一年服务器老用户可以买!

阿里云老用户优惠服务器99元/年&#xff0c;谁再说阿里云不好我给谁急&#xff0c;云服务器ECS配置为经济型e实例&#xff0c;2核CPU、2G内存、3M固定带宽、40G ESSD entry 系统盘&#xff0c;老用户优惠价99元一年&#xff0c;老用户可以买&#xff0c;当然新用户也可以买&…

[推荐]SpringBoot,邮件发送附件含Excel文件(含源码)。

在阅读本文前&#xff0c;可以先阅读我的上一篇文章&#xff1a; SpringBoot&#xff0c;使用JavaMailSender发送邮件(含源码)。 &#xff0c;本文使用的代码案例涉及到的 jar包、application.properties配置与它相同。 先看一下效果。 图一 图二 在下方代码案例中&#xff0c;…

【电路笔记】-正弦波形

正弦波 文章目录 正弦波1、概述2、波形产生3、总结 在 19 世纪末的 10 年间&#xff0c;许多技术成就使得交流电的使用得以扩展&#xff0c;并克服了直流电向公众供电的局限性。 1882 年&#xff0c;法国发明了变压器&#xff0c;它简化了交流电的分配&#xff0c;正如我们将在…

数字人小灿:始于火山语音,发于 B 端百业

火爆的数字人市场又有新消息来袭&#xff1a;火山语音的数字人小灿来了&#xff01; 数字人小灿首曝视频 今年以来&#xff0c;在生成式AI浪潮的助推下&#xff0c;大量企业争相布局数字人赛道。市场之所以如此火热&#xff0c;是因为AI数字人已被视为人工智能时代智能交互的入…

gcc/g++使用格式+各种选项,预处理/编译(分析树,编译优化,生成目标代码)/汇编/链接过程(函数库,动态链接)

目录 gcc/g--编译器 介绍 使用格式 通用选项 编译选项 链接选项 程序编译过程 预处理(宏替换) 编译 (生成汇编) 分析树(parse tree) 编译优化 删除死代码 寄存器分配和调度 强度削弱 内联函数 生成目标代码 汇编 (生成二进制代码) 链接(生成可执行文件) 函…

相册里的视频怎么提取音频?帮你整理了几个必备的!

有的时候视频中的音频包含重要信息&#xff0c;如对话、旁白、音乐等。提取音频不仅可以节省存储空间&#xff0c;还方便对这些信息进行单独处理和利用。那么如何提取音频呢&#xff1f;下面介绍了3种方法~ 方法一&#xff1a;直接使用手机相册自带功能 1、打开手机相册&#…

用二维码搭建设备巡检系统,轻松实现扫码巡检和数字化台账

针对设备状态不透明、纸质记录效率低、故障报修不及时等设备点巡检的常见问题&#xff0c;可以在草料二维码上自主搭建涵盖点检、巡检、报修、维修、保养等功能的管理系统&#xff0c;无需安装APP&#xff0c;微信扫码就能查看设备档案、用表单替代纸质检查表。 譬如“台州沿海…

【Javascript】Javascript高级程序设计:js 事件 随手笔记

目录 一、事件概述1.1 html 与 js1.2 事件流1.3 DOM 事件流 二、事件处理程序2.1 html 事件处理程序2.2 dom0 级事件处理程序2.3 dom2 级事件处理程序2.4 IE 事件处理程序 三、事件对象四、事件类型4.1 概述4.2 UI 事件4.3 焦点事件4.4 鼠标与滚轮事件4.5 键盘与文本事件4.6 额…

食堂系统登录报错

因为数据库没有任何用户数据&#xff0c;所以会报错&#xff0c;需要添加admin用户 D:\env\jdk1.8.0_341\bin\java.exe -XX:TieredStopAtLevel1 -noverify -Dspring.output.ansi.enabledalways -Dcom.sun.management.jmxremote -Dspring.jmx.enabledtrue -Dspring.liveBeansVie…

照片如何打包?三个方法轻松搞定!

照片打包是一种有效的管理方式&#xff0c;可以提高工作效率、保护照片安全、节省存储空间等。那么如何简单快速地打包照片呢&#xff1f;下面介绍了三种方法~ 方法一&#xff1a;使用嗨格式压缩大师 1、在电脑上打开【嗨格式压缩大师】&#xff0c;点击软件首界面的【图片压缩…

我的ChatGPT的几个使用场景

示例一&#xff0c;工作辅助、写函数代码&#xff1a; 这里展示了一个完整的代码&#xff0c;修正&#xff0c;然后最终输出的过程。GPT具备足够丰富的相关的小型代码生成能力&#xff0c;语法能力也足够好。这类应用场景&#xff0c;在我的GPT使用中&#xff0c;能占到65%以上…

docker 存储目录迁移

参考&#xff1a;【Docker专题】WSL镜像包盘符迁移详细笔记 - 掘金 docker迁移 一 默认目录 Windows版本&#xff08;Windows 10 wsl 2&#xff09;docker 默认程序安装到c盘&#xff0c;数据存放于 C:\Users\当前用户名\AppData\Local\Docker\wsl\data\ext4.vhdx 这样会导致…

从开发者的角度看K8S中的复合容器模式

就应用设计最佳实践和原则而言&#xff0c;构建复杂的基于容器的架构与编程没有太大区别。本文的目标是使用众所周知的编程原理从开发人员的角度展示三种流行的可扩展性架构模式。 让我们从单一职责原则开始。根据 R. Martin 的说法&#xff0c;“一个类应该只有一个改变的理由…

软考高级之系统架构师系列之操作系统基础

概念 接口 操作系统为用户提供两类接口&#xff1a;操作一级的接口和程序控制一级的接口。操作一级的接口包括操作控制命令、菜单命令等&#xff1b;程序控制一级的接口包括系统调用。 UMA和NUMA UMA&#xff0c;统一内存访问&#xff0c;Uniform Memory Access&#xff0c…

大型企业如何通过低代码平台提高开发效率和降低成本?

云计算、大数据、人工智能、物联网风口之下&#xff0c;企业数字化转型如同被按下了快进键。为快速攻破转型路上的技术关&#xff0c;企业纷纷把目光投向了低代码开发平台&#xff0c;希望可以用最短的时间&#xff0c;开发出最适合企业发展的应用。 集团企业需要什么样的数字化…

NeRF-SLAM部署运行(3060Ti)

记录在部署运行期间遇到的一些问题&#xff0c;分享给大家~ 一、环境 RTX 3060 Ti、8G显存&#xff08;其实是不够用&#xff0c;只能简单跑跑demo&#xff09;、Ubuntu18.04 二、部署 1. 下载代码 git clone https://github.com/jrpowers/NeRF-SLAM.git --recurse-submod…

解决恶意IP地址攻击:保卫网络安全的有效方法

随着互联网的发展&#xff0c;网络安全威胁变得日益复杂&#xff0c;其中包括恶意IP地址攻击。这些攻击通常是网络犯罪分子的手段之一&#xff0c;用于入侵系统、窃取数据或进行其他恶意活动。本文将探讨如何解决恶意IP地址攻击&#xff0c;以保护网络安全。 恶意IP地址攻击是…