vue3 + Element-plus + Echarts 5.2 切换不更新、导出PDF不显示 解决方案

news2025/2/23 7:37:18

vue3 + Element-plus + Echarts 5.2 切换不更新、导出PDF不显示 解决方案

    • 1、使用 el-tabs 切换导致 Echarts 不显示问题
    • 2、折线图 Echarts 不更新问题
    • 3、异常抛出: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘type‘)
    • 4、Echarts 导出PDF时不显示问题
    • 5、动态渲染 el-table 中的 el-table-column 表内容
    • 6、 导出 Excel 下载问题(前端导出或者后端导出)
    • 总结:

vue3官网 vue3官网
element-plus element-plus组件库连接
自己的组件库(维护中,后续更新) markm-ui组件库

1、使用 el-tabs 切换导致 Echarts 不显示问题


在这里插入图片描述
在这里插入图片描述

问题描述:

使用 el-tabs 切换导致 Echarts 不显示问题,因为切换标签后当前激活的标签ID会改变,而echarts读取的还是修改前的标签ID而这个标签已经不是当前激活的标签,它已经没有dom容器,因此Echarts不能被渲染。

1、 el-tabs配合 el-tab-pane 使用时,el-tab-pane 采用 for循环渲染,切换按钮导致 Echarts 不显示问题,数据正常加载;
2、获取不到 echarts 的高度,所以不显示;

  • 解决方案一:

    切换时我们 使用 v-if判断模块切换,因为v-if是通过条件判断是控制元素是否渲染到DOM中,创建和销毁DOM元素;v-sohw采用的是css属性display:none||block,创建和销毁DOM元素;

    在这里插入图片描述

    可以将 echarts 改为动态 ID,加上时间戳处理;
    全局变量定义动态id: lineChart + Date.now() + Math.random()

在这里插入图片描述

  • 解决方案二:

手写一个 按钮切换

<!-- tabs切换 -->
<el-row class="mb-4">
   <div
     v-for="(item, i) in tabsList"
     :key="i"
     class="tabs-item"
     @click="handleClick(item.name)"
   >
     <el-button type="primary">
       {{ item.title }}
     </el-button>
   </div>
 </el-row>

在这里插入图片描述

以上两种方法可解决 echarts 切换不显示问题!如遇到此类问题,无法解决,欢迎留言讨论帮解决。

2、折线图 Echarts 不更新问题

在这里插入图片描述

问题描述:

折线图–多条线切换导致页面展示多条线,不能实时更新线条数据!

解决方式:

	需要在实例中添加clear()方法
	state.myChart.clear() // 更新echarts

处理到这里,控制台会抛出一下的错误

3、异常抛出: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘type‘)

异常抛出:Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘type‘)

在这里插入图片描述
了解markRaw,并解决报错问题

首先要知道vue3中的 toRaw || markRaw 方法与作用;
markRaw 方法可以将一个对象标记为“非响应式”,从而使其不会被 reactive 包裹,也就不会成为 Vue3 中的响应式对象。

  • toRaw:
    作用:将一个由reactive生成的响应式对象转为普通对象。
    使用场景:
    用于读取响应式对象对应的普通对象,对这个普通对象的所有操作,不会引起页面更新。

  • markRaw:
    作用:标记一个对象,使其永远不会再成为响应式对象。
    应用场景:
    有些值不应被设置为响应式的,例如复杂的第三方类库等。
    当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能。


import { markRaw } from 'vue'
state.myChart = markRaw(echarts.init(document.getElementById('lineChart')));

-- 或者 --

state.chartDom = document.getElementById('lineChart')
state.myChart = markRaw(echarts.init(state.chartDom))

在这里插入图片描述
处理到这里相信问题以及迎刃而解。

4、Echarts 导出PDF时不显示问题

在这里插入图片描述

问题描述:

导出PDF时,Echarts 页面不显示,表格正常显示!

解决方式:

需要将Echarts 转换为图片,点击导出PDF时隐藏现有Echarts ,展示转换的img,可解决Echarts 导出不显示问题!
代码如下:getDataURL()方法

在这里插入代码片
/**
* 这里需要加上 setTimeout
* 将echarts转换为图片
/
  setTimeout(() => {
    state.chart1ImgSrc = state.myChart.getDataURL()
  }, 1500)

在这里插入图片描述

页面中需要通过v-if切换隐藏现有echarts

在这里插入图片描述

在这里插入图片描述

5、动态渲染 el-table 中的 el-table-column 表内容

在这里插入图片描述
在这里插入图片描述

问题描述:

通过以上图片可以看到,两次表筛选的时间都不同,渲染的表头也不一样!
el-table中的el-table-column需要动态生成数据,根据时间筛选月份渲染动态增加减少!
实现方案:

	<!-- 
	  1、首先渲染数据的第一条enterpriseTableresult2[0]?.months,这样可以循环出所有的月份
	  2、通过 row 获取到当前行的内容再次渲染 row.months[index]?.count
	 -->
	<el-table-column
	  v-for="(item, index) in enterpriseTableresult2[0]?.months"
	  :key="index"
	  align="center"
	  :label="item.month"
	>
	  <template #default="{ row }">
	    <span>
	      {{ row.months[index]?.count }}
	    </span>
	  </template>
	</el-table-column>

在这里插入图片描述

6、 导出 Excel 下载问题(前端导出或者后端导出)

记录一下导出功能: 导出功能分为前端实现导出和后端实现导出;

1、前端导出需要引入 excel.js 封装方法;方法以图略过,需要深入的小伙伴可以私信,这里就不着重讲了

在这里插入图片描述

2、后端导出需要后端提供ulr连接,通过连接直接下载;

在这里插入图片描述

  • 以下字段说明已明确标注!
    这里需要注意的是,在请求postExportAnalysisReport()接口的时候需要增加responseType: 'blob’类型

在这里插入图片描述
在这里插入图片描述

// 导出Excel
   const exportExcel = async () => {
     console.log('导出Excel', '日期')
     let params = {
       start: state.dateMonthValue[0]
         ? state.dateMonthValue[0]
         : state.dataFullYear,
       end: state.dateMonthValue[1]
         ? state.dateMonthValue[1]
         : state.dataFullYear,
     }
     state.excelLoading = true
     let nameExcel = `企业注册分析列表(${params.start} - ${params.end}).xlsx`
     await postExportAnalysisReport(params).then((res) => {
       const blob = new Blob([res], {
         type: 'application/vnd.ms-excel',
       }) // 构造一个blob对象来处理数据,并设置文件类型
       if (window.navigator.msSaveOrOpenBlob) {
         //兼容IE10
         navigator.msSaveBlob(blob, nameExcel)
       } else {
         const href = URL.createObjectURL(blob) //创建新的URL表示指定的blob对象
         const a = document.createElement('a') //创建a标签
         a.style.display = 'none'
         a.href = href // 指定下载链接
         a.download = nameExcel //指定下载文件名
         a.click() //触发下载
         URL.revokeObjectURL(a.href) //释放URL对象
         state.excelLoading = false
       } // 这里也可以不创建a链接,直接window.open(href)也能下载
     })
   }

今天的分享就到此结束了,喜欢的小伙伴点个收藏加关注!

下一章: 即将更新 【vue3搭建后台管理系统】

如需获得更多源码,请扫码!




总结:

前端路上 | 所知甚少,唯善学。
各位小伙伴有什么疑问,欢迎留言探讨。

— 关注我:前端路上不迷路 —


请添加图片描述




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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenHarmony docker环境搭建所见的问题和解决

【摘要】OpenHarmony docker环境搭建需要一台安装Ubuntu的虚拟机&#xff0c;并且虚拟机中需要有VScode。 整个搭建流程请参考这篇博客&#xff1a;OpenHarmony docker环境搭建-云社区-华为云 (huaweicloud.com) 上篇博主是用Ubuntu的服务器进行环境搭建的&#xff0c;在使用VS…

基于单片机的智能清洁小车设计—控制系统设计

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、研究的主要内容和目标二、总体方案设计2.1智能清洁小车的硬件系统组成2.2智能清洁小车的硬件结构图 三、 小车结构设计5.1基本布局和功能分析5.2小车二维及三维图小车三维图&#xff1a; 四、 原理图程序 五、…

2.OsgEarth封装

环境&#xff1a;Osg3.6.5 OsgEarth3.2 Qt5.15.2 基于qt将osgEarth封装&#xff0c;在Qt中作为GLWidget进行呈现。 1.Earth类的封装 基于地球的初始化顺序进行了封装&#xff0c;并暴露出了一些必要的属性&#xff0c;类似viwer、map、mapNode等。最为重要的是…

Fourier分析导论——第1章——Fourier分析的起源(E.M. Stein R. Shakarchi)

第 1 章 Fourier分析的起源 (The Genesis of Fourier Analysis) Regarding the researches of dAlembert and Euler could one not add that if they knew this expansion, they made but a very imperfect use of it. They were both persuaded that an arbitrary and d…

基于单片机的空气质量检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、主要内容二、系统方案设计2.1 系统方案设计2.2 主控制器模块选择 三、 系统软件设计4.1 程序结构分析4.2系统程序…

汇编学习(1)

汇编、CPU架构、指令集、硬编码之间的关系 ● 汇编语言&#xff1a;这是一种低级语言&#xff0c;用于与硬件直接交互。它是由人类可读的机器码或指令组成的&#xff0c;这些指令告诉CPU如何执行特定的任务。每条汇编指令都有一个对应的机器码指令&#xff0c;CPU可以理解和执…

25 行为型模式-备忘录模式

1 备忘录模式介绍 备忘录模式(memento pattern)定义: 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态. 2 备忘录模式原理 3 备忘录模式实现 /*** 发起人角色**/ public class Originator {private Strin…

城中村智能电表改造解决方案

随着我国城市化进程的加快&#xff0c;城中村作为城市发展的矛盾焦点&#xff0c;其居住环境、管理水平等问题日益凸显。城中村用电管理存在着用电安全隐患、电费核算不准确、偷电现象屡禁不止等问题。为了提高城中村用电管理水平&#xff0c;确保用电安全&#xff0c;推进智能…

通过pip,查看tensorflow和tensorflow-probaility版本

查看tensorflow和tensorflow-probability版本 如果在加载tensorflow 和 tensorflow-probablity时&#xff0c;没有成功的话&#xff0c;可以看下这两个包的版本&#xff0c;网上可以搜一下&#xff0c;这两个包版本是否搭配。 从上述信息总可以看到tensorflow包的版本是2.13.0…

DSP开发例程(4): logbuf_print_to_uart

目录 DSP开发例程: logbuf_print_to_uart新建工程源码编辑app.cfgos.cmain.c 调试说明 DSP开发例程: logbuf_print_to_uart SYS/BIOS 提供了 xdc.runtime.Log, xdc.runtime.LoggerBuf 和 xdc.runtime.LoggerSys 这几个模块用于日志记录. 日志信息在 应用程序调试和状态监控中非…

Web服务器与Http协议

Web服务器与Http协议 一.Web服务器 1.简介 Web服务器一般指网站服务器&#xff0c;也称之为WWW(World Wide Web)服务器Web服务器是指驻留于因特网上某种类型计算机的程序Web服务器不是硬件服务器&#xff0c;而是软件服务器。Web服务器其主要功能是提供网上信息浏览服务&…

论文阅读——BERT

ArXiv&#xff1a;https://arxiv.org/abs/1810.04805 github&#xff1a;GitHub - google-research/bert: TensorFlow code and pre-trained models for BERT 一、模型及特点&#xff1a; 1、模型&#xff1a; 深层双向transformer encoder结构 BERT-BASE&#xff1a;(L12, H…

2.19每日一题(分段函数求定积分)

注意&#xff1a;当x>1时需要分区间求定积分 用变上限积分的定理&#xff1a;如果 f(x) 连续&#xff0c;则 F(x) 的导数 f(x) 变上限积分的导数为 f(x) 1、先判断 f(x) 是否连续———>判断在分界点的值是否相等&#xff0c;相等则 f(x) 连续&#xff0c;则 F(x&#…

实体店做商城小程序如何

互联网电商深入各个行业&#xff0c;传统线下店商家无论产品销售还是服务业&#xff0c;仅靠以往的经营模式&#xff0c;很难拓展到客户&#xff0c;老客流失严重&#xff0c;同时渠道单一&#xff0c;无法实现外地客户购物及线上客户赋能等。 入驻第三方平台有优势但也有不足…

Java练习题2020-4

小明今天收了N个鸡蛋&#xff0c;每个鸡蛋各有重量&#xff0c;现在小明想找M个重量差距最小的鸡蛋摆成一盒出售&#xff0c;输出符合条件的最重一盒鸡蛋的总重量 输入说明&#xff1a;第一行&#xff0c;鸡蛋个数N(N<1000) 每盒个数M(M<N)&#xff1b;第二行&#xff0…

如何使用PHPicker在iOS系统无授权下获取资源

本文字数&#xff1a;2766字 预计阅读时间&#xff1a;18分钟 自iOS14系统开始&#xff0c;苹果加强了用户隐私和安全功能。新增了“Limited Photo Library Access”模式&#xff0c;同时在授权弹窗中增加了“Select Photo”选项。这意味着用户可以在应用程序请求访问相册时选择…

Unity编辑器扩展之自定义Inspector面板

首先找到的是这个[CustomEditor(typeof(Class), true)]&#xff0c;这个东西能够自己绘制在Inspector视图的显示规则&#xff0c;但是&#xff01;如果这个类被另一个类持有&#xff0c;他就没作用了&#xff0c; 效果图&#xff1a; 1.对CustomClass类编辑自定义面板 2. 对M…

为什么Facebook运营需使用IP代理?

随着互联网的快速发展和全球用户规模的不断增长&#xff0c;Facebook已成为了全球最大的社交媒体平台之一。然而&#xff0c;大批量地运营Facebook账号往往需要借助IP代理这一工具&#xff0c;提高账号的安全性和可靠性&#xff0c;使得运营Facebook更加流畅。那么Facebook为什…

QGIS008:QGIS拓扑检查、修改及验证

摘要&#xff1a;本文介绍使用QGIS拓扑检查器和几何图形检查器检查图层的拓扑错误&#xff0c;修改拓扑错误&#xff0c;并对修改后的图层进行错误验证。 实验数据&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Vy2s-KYS-XJevqHNdavv9A?pwdf06o 提取码&#xff1a…

源码角度分析Java 循环中删除数据为什么会报异常

一、源码角度分析Java 循环中删除数据为什么会报异常 相信大家在之前或多或少都知道 Java 中在增强 for中删除数据会抛出&#xff1a;java.util.ConcurrentModificationException 异常&#xff0c;例如&#xff1a;如下所示程序&#xff1a; public class RmTest {public sta…