【Vue+ElementUI】el-table动态高度设置及表格内容错乱对不齐

在Vue中使用ElementUI的el-table标签会遇到以下问题

一、遇到页面切换时,表格内容错乱(对不齐):doLayout()

二、动态计算表格高度:getTableMaxHeight()

页面结构:搜索框+表格,通常会在表格内部进行滚动比较好看,这时候就需要计算并设置表格高度

<template>
  <div class="app-container">
  
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
      <el-form-item label="名字" prop="name">
        <el-input
          v-model="queryParams.name"
          placeholder="请输入名字"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
    </el-form>
    
    <el-table 
	  ref="tables" 
	  v-loading="loading" 
	  :data="list" 
	  :height="maxHeight"
	>
		<el-table-column label="ID" align="center" prop="id" />
		<el-table-column label="名字" align="center" prop="name" />
		<el-table-column label="年龄" align="center" prop="age" />
	</el-table>
  </div>
</template>
<script>
export default {
	data() {
    return {
      loading: true,
      list: [], // 表格数据
      maxHeight: null,
      queryParams: {}
    },
    created() {
      this.getList();
    },
    mounted() {
      // 监听窗口变化事件
	  window.addEventListener("resize", this.resizeScreen);
	},
	// 页面销毁时移除监听事件
	beforeDestroy() {
	  window.removeEventListener('resize', this.resizeScreen)
	},
	// 页面缓存重新进入页面时,在路由组件被激活时触发
	activated() {
	  this.$nextTick(() => {
	    this.$refs.tables.doLayout(); // 对表格重新布局(解决切换页面后列错乱)
	  })
	},
	methods: {
		// 获取数据,设置表格高度
		getList() {
			this.loading = true;
			this.list = [
				{id: 1, name: '小红', age: 20},
				{id: 2, name: '小华', age: 20},
				{id: 3, name: '小东', age: 20},
				{id: 4, name: '小刘', age: 20},
			];
			this.resizeScreen(); // 获取数据后,计算高度并重新渲染表格
			this.loading = false;
		},
		// 窗口变化时,表格高度跟着动态变化
		resizeScreen() {
	      this.$nextTick(() => {
	        this.maxHeight = this.getTableMaxHeight(); // 计算高度
	        this.$refs.tables.doLayout(); // 重新渲染表格
	      })
	    },
	    // 动态计算并返回:表格最大高度 computeHeight
	    getTableMaxHeight() {
	      if (!this.list.length) return // 如果没有数据,直接退出
	      if (!this.$refs.tables) return;
	      // 表头高度
	      var headerHeight = document.getElementsByClassName('el-table__header')[0].offsetHeight;
	      // 表内高度
	      var bodyHeight = document.getElementsByClassName('el-table__body')[0].offsetHeight;
	      // 默认表格高度 = 表头 + 表内 (表格渲染后的默认高度)
	      var tableDataHeight = headerHeight + bodyHeight; 
	      // 页面高度
	      var pageHeight = document.getElementsByClassName('app-main')[0].offsetHeight; 
	      // 页内边距
	      const pagePadding = 40; 
	      // 动态高度:el-form 搜索框
	      var elFormHeight = document.getElementsByClassName('el-form')[0].offsetHeight; 
	      // 导出行高度(包含margin)
	      const elRowOperButton = 36; 
	      // 分页高度(包含margin)
	      const pagingHeight = 50; 
	      // 计算页面最大容纳高度
	      var computeHeight = pageHeight - pagePadding - elFormHeight - elRowOperButton - pagingHeight; 
	      // 是否有X轴滚动条
	      var hasScrollX = document.getElementsByClassName('el-table--scrollable-x').length; 
	      // 当 最大高度 大于 表格数据高度时,取表格高度(注:有滚动条时 + 滚动条高度)
	      if (computeHeight > tableDataHeight) {
	        computeHeight = (hasScrollX ? tableDataHeight + 17 : tableDataHeight) + 1; // 必须+1,否在有y轴滚动条出现
	      }
	      // console.log('表头', headerHeight,
	      //   'rowHeights', rowHeights,
	      //   'pageHeight', pageHeight, 
	      //   'lastHeight', computeHeight,
	      //   'tableDataHeight', tableDataHeight,
	      //   'computeHeight', computeHeight,
	      // )
	      return computeHeight;
	    }
  	}
 }
</script>

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

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

相关文章

黑马面试篇

课程地址&#xff1a;新版Java面试专题视频教程&#xff0c;java八股文面试全套真题深度详解&#xff08;含大厂高频面试真题&#xff09;_哔哩哔哩_bilibili 课程名称&#xff1a;新版Java面试专题视频教程&#xff0c;java八股文面试全套真题深度详解&#xff08;含大厂高频…

【Protobuf】protobuf详细介绍

protobuf详细介绍 一、前言二、Protobuf简介2.1、核心思想2.2、Protobuf是如何工作的&#xff1f;2.3、如何使用 Protoc 生成代码&#xff1f;2.4 入门命令 一、前言 在以往的项目中进行网络通信和数据交换的应用场景中&#xff0c;最经常使用的技术便是json或xml。随着JSON的…

用户中心 -- 插件使用 插件使用思路

易错注意点 1 5.1启动类 & 入口类 需保持一致 网址&#xff1a; 第一节课&#xff0c;用户管理--后端初始化&#xff0c;项目调通。二次翻工2-CSDN博客 一、 用户管理 框架 网址&#xff1a; 用户管理 --汇总 -- 明细-CSDN博客 1.2 更改路径&#xff0c;并生效 网址…

盘点那些你不知道的“痛”,柯桥俄语培训

首先我们来看一下болеть的五大含义&#xff1a; ①(чем 及无补语) 生病&#xff0c;患病 例&#xff1a; болеть тифом 害伤寒病 болеть воспалением лёгких 得肺炎 ②[只用第3人称] болит&#xff0c;болят 疼痛 例&am…

CDGA|数据治理新视角:清洗数据,让数据质量飞跃提升

在数据治理的新视角下&#xff0c;数据清洗不再是一个孤立的环节&#xff0c;而是与数据收集、存储、分析和应用紧密相连。它涉及到数据的全生命周期&#xff0c;从源头开始就对数据进行严格的把控。在数据收集阶段&#xff0c;通过设定合理的数据规范和校验机制&#xff0c;确…

DFS时间戳

时间戳 这就是树上查询问题 &#xff0c; 是求两个点有什么关系 让我们来看一下样例解释&#xff1a;注意字母旁边的数字就是时间戳&#xff0c; a在先序遍历&#xff08;遍历顺序 &#xff1a; 左&#xff0c;右&#xff0c;根&#xff09;是第一个进&#xff0c; 第十六个出…

#ESP32S3R8N8建立工程(VSCODE)点亮LED

1.参考文档 【立创ESP32S3R8N8】IDF入门手册 - 飞书云文档 (feishu.cn)https://lceda001.feishu.cn/wiki/GOIlwwfbIi1SC3k8594cDeFVn8g 2.建立工程 3.运行效果 4.更改配置 5.插播 之前配置的环境是有问题的&#xff0c;就算有自动检测也要仔细检查&#xff0c;必须严格按照以…

Linux内核广泛采用的侵入式数据结构设计

Linux内核广泛采用的侵入式数据结构设计恐怕很难应用到一般程序开发中。基本上是个高维十字链表&#xff0c;一个节点(struct)可以同时位于多个hash/list/tree中。我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪…

一键设置jdk环境脚本

自动化脚本 一、使用方法 创建一个txt文本&#xff0c;放在和jdk存放的同一目录下&#xff0c;复制粘贴进我的代码&#xff0c;利用全局替换&#xff0c;将jdk1.8,改成你自己的jdk包名字&#xff0c;再重新把这个文件保存为.vbs文件。然后运行就行了 MsgBox "Runing s…

邮件SMTP服务的性能怎么做优化?如何配置?

邮件SMTP服务的工作原理&#xff1f;邮件服务器发信的优势特点&#xff1f; 邮件SMTP服务作为信息传递的核心组件&#xff0c;其性能优化显得尤为关键。一个高效稳定的SMTP服务不仅能提升工作效率&#xff0c;还能保障信息安全。那么&#xff0c;邮件SMTP服务的性能怎么做优化…

Web漏扫工具OWASP ZAP安装与使用(非常详细)从零基础入门到精通,看完这一篇就够了。

本文仅用于安全学习使用&#xff01;切勿非法用途。 一、OWASP ZAP简介 开放式Web应用程序安全项目&#xff08;OWASP&#xff0c;Open Web Application Security Project&#xff09;是一个组织&#xff0c;它提供有关计算机和互联网应用程序的公正、实际、有成本效益的信息。…

MySQL数据库基础(数据库的基本操作、常用的数据类型、表的相关操作)

前言 今天我们将介绍数据库的基本操作、常用的数据类型、表的相关操作 一、数据库的基本操作 1.1 显示当前的数据库 操作代码 show databases;1.2 创建数据库 基本语法&#xff1a; 1. //创建数据库 create database examble;2. create database if not exists exist exa…

必应bing广告推广开户时间需要多久?

企业选择合适的平台进行广告投放成为了企业获取竞争优势的关键一步&#xff0c;必应Bing作为全球第二大搜索引擎&#xff0c;凭借其庞大的用户基础和精准的广告定位能力&#xff0c;成为了众多企业海外及国内市场推广的优选渠道。云衔科技以专业、高效的服务&#xff0c;成为企…

JMeter的下载安装与使用(Mac)

1、下载地址​​​​​​https://jmeter.apache.org/download_jmeter.cgi 2、下载Binaries 下的apache-jmeter5.5.tgz 3、解压 4、启动 在bin目录下打开终端&#xff0c;输入sh jmeter 出现jmeter首页界面&#xff0c;即为成功。 5、使用 5.1 语言选择 option选项卡&am…

新装电脑Flutter环境部署坑汇总(持续更新)

1.本地安装&#xff0c;安装fvm的坑 本人电脑使用windows &#xff0c;安装fvm则一般使用choco安装&#xff0c;那么首先需要安装choco,打开powershell/或者cmd运行以下命令&#xff1a; Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager…

Mycat(二)读写分离(Mysql读写分离->MyCat读写分离)、安装JDK

文章目录 概述搭建 MySQL 数据库主从复制MySQL 主从复制原理主机配置(atguigu01)从机配置(atguigu02)主机、从机重启 MySQL 服务主机从机都关闭防火墙在主机上建立帐户并授权 slave在从机上配置需要复制的主机主机新建库、新建表、insert 记录&#xff0c;从机复制停止从服务复…

Linux基本指令(2)

目录 mv指令&#xff1a; cat&#xff1a; more指令&#xff1a; less指令&#xff1a; head指令&#xff1a; tail指令&#xff1a; mv指令&#xff1a; 说明&#xff1a; mv命令是move的缩写&#xff0c;可以用来移动文件或者文件改名(move(rename)files),是linux系统下…

LMDeploy 量化部署 LLM-VLM 实践 学习笔记

视频链接 https://www.bilibili.com/video/BV1tr421x75B/?vd_sourcea1ce254b4a97f9f687a83e661793cb2c 什么是模型部署 部署指的是已经开发好的大模型投入使用&#xff0c;要把模型部署到服务器或者移动端里&#xff0c;如何在有限的资源里加载大模型&#xff1f; 比如你好不…

2024年信息教育化与语言艺术国际学术会议(IACIELA 2024)

2024年信息教育化与语言艺术国际学术会议(IACIELA 2024) 2024 International Conference on Information Education and Language Art 一、【会议简介】 2024年信息教育化与语言艺术国际学术会议&#xff0c;将探讨教育与语言艺术的结合。 在当今的信息时代&#xff0c;语言艺术…

ElasticSearch批处理

在刚才的新增当中&#xff0c;我们是一次新增一条数据。那么如果你将来的数据库里有数千上万的数据&#xff0c;你一次新增一个&#xff0c;那得多麻烦。所以我们还要学习一下批量导入功能。 也就是说批量的把数据库的数据写入索引库。那这里的需求是&#xff0c;首先利用mybat…