vue3使用Eachart图表库踩坑记录

前言

大家好我是没钱的君子下流坯,用自己的话解释自己的知识。很久很更新了,最近一直在加班,今天记录一个eachar图表报警告说过去不到当前DOM节点的宽高导致页面中的图表宽高不正确的坑。

案例

在这里插入图片描述
就是一些基础的图形的使用,一个后台的管理系统使用的技术栈是vue3,我这几张图表放的位置是在好一个 tabs切换栏下面在这里插入图片描述
就是这种切换栏下面有图表。

代码

<template><div class="chart-wrapper" style="height: 400px; width: 100%"><div  ref="chartContainer" class="chart-container" ></div></div>
</template><script setup>
import { ref, onMounted, onUnmounted, watch, nextTick } from 'vue';
import * as echarts from 'echarts';// 定义 props
const { Tindex, chartOption, width, height } = defineProps({chartOption: {type: Object,required: true},width: {type: String,default: '1200px' // 默认宽度},height: {type: String,default: '400px' // 默认高度},Tindex:{type: String,default:'1'}
});const chartContainer = ref(null);
let myChart = null;// 计算图表容器的样式
const chartStyle = computed(() => ({width: props.width,height: props.height
}));// 初始化图表
const initChart = async () => {console.log(Tindex);await nextTick(); if (myChart) {myChart.dispose(); // 销毁旧的图表实例}myChart = echarts.init(chartContainer.value);setChartOption();
};// 设置图表选项
const setChartOption = () => {if (myChart && chartOption) {myChart.setOption(chartOption);}
};// 组件挂载时初始化图表
onMounted(() => {initChart();
});// 当 props.option 发生变化时更新图表
watch(() => chartOption,() => {setChartOption();},{ deep: true }, // 深度监听对象内部属性的变化()=>Tindex
);
</script><style scoped>
.chart-wrapper {width: 100%;height: 400px; /* 确保父容器有明确的高度 */
}.chart-container {width: 100% !important;height: 400px; /* 继承父容器的高度 */
}
</style>

问题


[ECharts]height. Please check dom,clientwidth and dom.clientHeight.Can’t get DoM width oreXamoLe. They should not be 0.you may need to call this in the callback of window.onload
图中大概位置就是说在初始化的时候找不到dom节点,上面的代码大家可以看到已经是我修改的版本但还是有一些问题的,我已经进行了 nextclick的方法去加载dom了,发现还是不行,然后我为了测试我写了一个定时器让eachart延迟加载3秒,发现还是一样的报错,这时候我一直以为是我加载的代码有问题,我就案例放到我自己项目上去运行,但是就不会报错。一样的代码换了一个项目结果一个报错一个不报错,这然我就很疑惑,认真排查了很多遍的代码,然后去问各种gpt给的方法都试了。

解决

1.nextclick的方法去等待dom加载。
2.定时器延迟加载图表。
以上的方法是已经确定能获取到DOm的,这时候我就不知道是什么原因导致获取不到DOM了,然后我就仔细的去F12找元素发现页面上确实没有承载echarts图表的div,我叼了,我明明写了但是为什么元素中找不到呢。
3.问题在于tabs切换栏,我使用的是elementuiplus中的切换栏,因为我的echarts并没有放在第一个tabs切换栏的内容中,在后面的切换栏里面,但是echarts是进入整个页面的时候就加载了,但是tabs栏的位置是在第一个选项的问题,后面的元素都被v-if给销毁节点了,所以找不到DOM节点是正常的。这也证明了elementui-plus的tabs是通过v-if控制显示隐藏的。

解决代码

const initChart = async () => {console.log(Tindex);if(Tindex=='7'){await nextTick(); // 确保 DOM 已更新console.log('我等你三秒')if (myChart) {myChart.dispose(); // 销毁旧的图表实例}myChart = echarts.init(chartContainer.value);setChartOption();}else{console.log("我没进来")}};

加了一个判断,判断当前显示的是不是图表所在的tabs选项栏,是的时候才让其加载就解决了问题。

总结

要了解每个组件库中常用组件的实现原理,有一些方法会响应一些效果的显示,希望大家有没有bug。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GC常见垃圾回收算法,JVM分代模型

如何判断是垃圾&#xff1f;引用计数器和Root可达性算法 如何进行清除&#xff1f;标记清除、复制、标记整理 堆分代模型&#xff1f;Eden&#xff0c;Surevivor&#xff0c;Tenuring 一个对象从创建到消亡的过程&#xff1f; 对象什么时候进入老年代&#xff1f; 一、GC&a…

2.1、模版语法

2.1.1、插值语法 1、代码示例 <body><!-- 准备容器 --><div id"app"><!-- 在data中声明的 --><!--1、 data中声明的变量 --><h1>{{msg}}</h1><h1>{{sayHello()}}</h1><!-- 不在data中的变量不可以 -->…

小米手机突破小米社区5级等级限制解锁BL教程。小米手机解锁。

小米手机突破小米社区5级等级限制解锁BL教程 引言 小米社区对于解锁BootLoader&#xff08;BL&#xff09;的等级限制一直是一个热议话题。特别是对于小米澎湃OS用户来说&#xff0c;官方要求社区等级达到5级才能解锁BL&#xff0c;这对于许多用户来说是一个不小的挑战。不过…

UnityShaderLab-实现溶解效果

实现思路&#xff1a; 使用一张噪声图&#xff0c;与一个Cut值计算&#xff08;加或减&#xff09;&#xff0c;将计算后的值赋值给Alpha,然后小于0的片段就被丢弃掉了。 ShaderGraph实现&#xff1a; ShaderLab实现&#xff1a; Shader "Dissolve" {Properties{_…

【24年新算法时间序列预测】黑翅鸢BKA优化Transformer时间序列预测(评估指标全,出图多)

本文采用黑翅鸢优化算法( BKA&#xff0c;2024年新算法)优化Transformer模型的超参数&#xff0c;形成了BKA-Transformer时间序列预测模型&#xff0c;以进一步提升其在时间序列预测中的性能&#xff0c;本文采用Matlab编写了BKA-Transformer时间序列预测模型代码&#xff0c;代…

快速学习selenium基础操作

全篇大概19000字&#xff08;含代码&#xff09;&#xff0c;建议阅读时间1h 什么是Selenium&#xff1f; Selenium是一系列自动化工具集的统称&#xff0c;官方工具有 Selenium IDE、Selenium WebDriver、Selenium Grid&#xff0c; 主要用于桌面端Web应用程序的自动化。能够通…

互联网、物联网的相关标准

互联网的相关标准 网络通信协议&#xff1a; HTTP&#xff08;Hypertext Transfer Protocol&#xff09;&#xff1a;用于在网络中传输文本、图像、音频和视频等数据的协议。它基于请求-响应模型&#xff0c;客户端发送请求给服务器&#xff0c;服务器返回响应。HTTPS&a…

Milvus向量数据库06-RAG检索增强

Milvus向量数据库06-RAG检索增强 文章目录 Milvus向量数据库06-RAG检索增强1-学习目标2-参考网址3-执行过程记录1-到底什么是RAGRAG 的基本流程&#xff1a;为什么 RAG 优于传统的基于检索的方法&#xff1a;示例流程&#xff1a; 2-RAG和Elasticsearch对比3-RAG和向量数据库之…

Oracle定位行锁的数据行

背景 今天上午在查询行锁的事后发现v$lock的id1和id2&#xff0c;阻塞的和被阻塞的会话一样&#xff0c;这能说明什么&#xff1f; 既然是被阻塞了&#xff0c;那争用的应该是同一块数据&#xff0c;但是一个事务已经修改了&#xff0c;没提交数据块上还有前镜像的指针&#…

力扣-图论-8【算法学习day.58】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…

jenkins安装(jdk1.8已安装)

1. 下载对应jenkins版本 https://mirrors.jenkins.io/war/ 2. 上传至服务器目录并启动 mkdir -p /root/jenkins cd /root/jenkins 上传文件 启动&#xff1a;nohup java -jar jenkins.war --httpPort9090 &> jenkins.log & 访问&#xff1a;http://ip:9090 选…

异步操作、Promise和axios

1.Javascript是单线程的 什么是进程&#xff0c;什么是线程&#xff1f; 进程&#xff1a;进程是操作系统分配资源和调度的基本单位。它是一个程序的实例&#xff0c;包含了运行程序所需的代码和数据以及其它资源。 线程&#xff1a;线程是进程中的实际运行单位&#xff0c;也是…

python基础:(八)文件

目录 一.从文件中读取数据1.1读取整个文件1.2文件路劲1.3逐行读取 二.写入文件 一.从文件中读取数据 各位小伙伴&#xff0c;文件这一块得好好学&#xff0c;多看多敲代码&#xff0c;以后处理数据&#xff0c;写爬虫少不了这个&#xff0c;先从基础&#xff08;简单的&#x…

基于视觉的3D占用网络汇总

综述文章:https://arxiv.org/pdf/2405.02595 基于视觉的3D占用预测方法的时间线概述: 自动驾驶中基于视觉的3D占用预测的分层结构分类 2023年的方法: TPVFormer, OccDepth, SimpleOccupancy, StereoScene, OccupancyM3D, VoxFormer, OccFormer, OVO, UniOcc, MiLO, Multi-…

IDEA创建Spring Boot项目配置阿里云Spring Initializr Server URL【详细教程-轻松学会】

1.首先打开idea选择新建项目 2.选择Spring Boot框架(就是选择Spring Initializr这个) 3.点击中间界面Server URL后面的三个点更换为阿里云的Server URL Idea中默认的Server URL地址&#xff1a;https://start.spring.io/ 修改为阿里云Server URL地址&#xff1a;https://star…

2024-12-06 Unity Addressables3——资源加载

文章目录 1 引用加载1.1 Addressables 的资源引用类1.2 加载资源1.3 加载场景1.4 释放资源 2 Label 介绍3 动态加载3.1 加载单个资源3.2 加载多个资源 Unity 版本&#xff1a;6000.0.26f1c1Addressables 版本&#xff1a;2.3.1 1 引用加载 1.1 Addressables 的资源引用类 Ass…

详解RabbitMQ在Ubuntu上的安装

​​​​​​​ 目录 Ubuntu 环境安装 安装Erlang 查看Erlang版本 退出命令 ​编辑安装RabbitMQ 确认安装结果 安装RabbitMQ管理界面 启动服务 查看服务状态 通过IP:port访问 添加管理员用户 给用户添加权限 再次访问 Ubuntu 环境安装 安装Erlang RabbitMq需要…

`yarn list --pattern element-ui` 是一个 Yarn 命令,用于列出项目中符合指定模式(`element-ui`)的依赖包信息

文章目录 命令解析&#xff1a;功能说明&#xff1a;示例输出&#xff1a;使用场景&#xff1a; yarn list --pattern element-ui 是一个 Yarn 命令&#xff0c;用于列出项目中符合指定模式&#xff08; element-ui&#xff09;的依赖包信息。 命令解析&#xff1a; yarn list…

IO进程 学习笔记

……接上文 fputs&#xff08;输入字符串&#xff09; int fputs(const char *s, FILE *stream);功能&#xff1a;向指定文件中输入一串字符参数&#xff1a;s:输入字符串的首地址stream&#xff1a;文件流指针返回值&#xff1a;成功返回输出字符个数失败返回EOF文件指针偏移函…

Ubuntu压缩打包解压

ubuntu压缩打包 上图&#xff0c;压缩当前目录svn 为svn.tar.gaz&#xff0c;解压后再当前解压目录生成svn文件 在Ubuntu中&#xff0c;你可以使用tar命令来创建一个压缩包&#xff0c;或者使用zip命令来创建一个.zip压缩文件。以下是两种常见的压缩方法&#xff1a; 下图&am…