Vue3 父组件数据改变Echarts子组件图表没有变化

2023-10-31

一、问题

使用vue3写页面,引入一个echarts图,父组件数据改变,图表没有重新渲染。

二、目标效果图

在这里插入图片描述

三、解决(数据变了, 图表不变化)

只需要2步:

1、echarts图组件监听数据(数据改变,重新渲染)

watch(
		() => props.chartData,
		() => {
			//dispose为了解决警告 There is a chart instance already initialized on the dom.
			echart.dispose(document.getElementById('LineBar'))
			initChart() //重新渲染的方法
		}
	)

2、在使用setOption()方法之前,重新给option中的数据赋值即可,代码如下:

let initChart = () => {
		let Echarts = echarts.init(document.getElementById('LineBar'))
		 //重新赋值(必须,否则渲染不上)
		option.value.xAxis.data = props.chartData.xAxisData
		option.value.series[0].data = props.chartData.data
		// 绘制图表
		Echarts.setOption(option.value)
		// 自适应大小
		window.addEventListener(
			'resize',
			(window.onresize = () => {
				Echarts.resize()
			})
		)
	}

注意:父组件正常调接口 传值即可

解决警告 There is a chart instance already initialized on the dom.

echart.dispose(document.getElementById('LineBar'))

解决警告Instance ec_1680155339347 has been disposed

不要使用以下写法:(暂时不清楚具体原因)


window.addEventListener(
		'resize',
		(window.onresize = () => {
			Echarts.resize()
		})
		)

改为这样写法:

window.addEventListener('resize', onResize(Echarts))
let onResize = (Echarts) => {
		window.onresize = () => {
			Echarts.resize()
		}
	}

四、Echarts子组件 完整代码

<template>
	<div id="LineBar"></div>
</template>
<script name="LineBar" setup>
	import { onMounted, defineProps, watch } from 'vue'
	import * as echarts from 'echarts'

	const props = defineProps({
		chartData: {
			type: Object,
			required: true
		}
	})
	watch(
		() => props.chartData,
		() => {
			//解决警告 There is a chart instance already initialized on the dom.
			echart.dispose(document.getElementById('LineBar'))
			initChart()
		}
	)
	let option = ref({
		tooltip: {
			trigger: 'axis'
		},
		// legend: {
		// 	data: vulnerabilityTrendData.value.xdata
		// },
		grid: {
			left: '3%',
			right: '4%',
			bottom: '3%',
			containLabel: true
		},
		xAxis: {
			type: 'category',
			boundaryGap: false,
			data: props.chartData.xAxisData
		},
		yAxis: {
			type: 'value'
		},
		series: [
			{
				name: 'ddd',
				type: 'line',
				smooth: true,
				data: props.chartData.data,
				areaStyle: {
					color: {
						type: 'linear',
						x: 0,
						y: 0,
						x2: 0,
						y2: 1,
						colorStops: [
							{
								offset: 0,
								color: 'rgba(46, 121, 255, 0.2)' // 0% 处的颜色
							},
							{
								offset: 1,
								color: 'rgba(46, 121, 255, 0.0001)' // 100% 处的颜色
							}
						]
					}
				},
				color: '#2E79FF',
				lineStyle: {
					color: {
						colorStops: [
							{
								offset: 0,
								color: '#8477FF'
							},
							{
								offset: 1,
								color: '#5CCAFF'
							}
						]
					},
					width: 2,
					shadowOffsetY: 12,
					shadowColor: 'rgba(59, 138, 254, 0.1)'
				}
			}
		]
	})
	let echart = echarts

	onMounted(() => {
		initChart()
	})
	let initChart = () => {
		let Echarts = echarts.init(document.getElementById('LineBar'))
		//手动赋值
		option.value.xAxis.data = props.chartData.xAxisData
		option.value.series[0].data = props.chartData.data
		// 绘制图表
		Echarts.setOption(option.value)
		// 自适应大小(这样写会出现:父组件数据修改,浏览器窗口大小改变,会警告Instance ec_1680155339347 has been disposed)
		//window.addEventListener(
		//	'resize',
		//	(window.onresize = () => {
		//		Echarts.resize()
		//	})
		//)
		//改成以下写法
		window.addEventListener('resize', onResize(Echarts))
	}
	let onResize = (Echarts) => {
		window.onresize = () => {
			Echarts.resize()
		}
	}
</script>

<style scoped></style>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue3 父组件数据改变Echarts子组件图表没有变化 的相关文章

随机推荐

  • MySql 插入数据报出Duplicate entry...for key...的问题解决

    Duplicate entry for key 的错误原因是主键的唯一值重复 在对数据库进行修改 插入操作时 一但主键的唯一值重复就会报此错误 有时在表中存在多个主键时 对表操作仍然报此错误 是因为对该表的索引造成的 例如一个表中有 id1
  • OSError: [Errno 22] Invalid argument已解决(to_csv()时遇到以时间为文件名)

    常规来讲是路径问题 路径中有转义字符 pd to csv C time nice home csv 比如这个中 n是转义字符 有特定意义的 所以会报错 命名不合规范 pd to csv C time nice 2019 03 13 22 2
  • 【图论】图的深度优先遍历与广度优先遍历(图文讲解)

    一 前言 看懂这篇博客你需要提前知道这些知识点 1 C 链式前向星存图 2 dfs和bfs是什么以及基本概念 3 C STL中的queue 队列数据结构的简单知识点 4 有关图的一些简单的概念 图论是一个很重要的知识块 在学习如何遍历图之前
  • R语言常用packages(常用R包)

    新浪微博 网页版搜索 Jenny爱学习 微信公众号 R语言数据分析与实践 更新时间 Feb 1st 2019 R语言由近几年随着数据挖掘 机器学习在国内兴起而大热 现在R已经发展成为一个社区语言 有者非常多的packages支持工程应用 几
  • 【华为OD机试】斗地主之顺子【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 在斗地主扑克牌游戏中 扑克牌由小到大的顺序为 3 4 5 6 7 8 9 10 J Q K A 2 玩家可以出的扑克牌阵型有 单张 对子 顺子 飞机 炸弹等 其中顺子
  • C++socket编程(三):3.6 服务端recv客户端发送的数据

    服务端中获取客户端发送过来的数据一定是关闭套接字之前进行 close之后就收不到数据了 一般读取数据一般用read windows上一般用recv 本质上也是read 但是为了跨平台 所以一般用revc 如下代码 sockaddr in c
  • Wondows10查看系统激活

    通常在安装了新系统之后 都是不了解自己的系统是否激活的状态 担心不能正常使用全部的系统功能 如果不知道如何查看系统激活状态 可以看一下这篇短文 这里我就win10激活为例讲解查看激活状态的方法 1 属性 在windows10桌面环境下 鼠标
  • Android基础知识(三)Activity及其生命周期

    一 按钮触控 最常见的按钮button类继承自Textview类 需要注意的是 在Button中显示的单词默认全部大写 public void onClick View v s1 et1 getText toString 有一些小bug 好
  • 四步编写第一个java程序

    文章目录 第一步 下载JDK 第二步 配置java环境变量 第三步 下载对应的IDE工具 第四步 编译第一个java程序 第一步 下载JDK 在jdk在Oracle公司的官方网站 甲骨文官网 下载javajdk 点击downloads 找到
  • wireshark分析tcp,rtp

    要添加过滤器 也很简单 首先要搞清楚 要过滤的条件在那一层协议 比如ip地址 那他就是在ip层 所以 ip 就会有提示 ip addr ip dst ip src 注意不要在ip dst port上纠结了 ip层哪里有端口 端口应该是在tc
  • 百度智能云.图像特效:图像风格转换&黑白图像上色

    图像风格转换 黑白图像上色 目标 准备工作 操作流程 1 阅读官方文档 2 开始实现鉴权 3 图像风格转换 4 对比一下 5 黑白图像上色 目标 在上一篇文章中体验了人像动漫化效果 看了官方文档 这个还可以转换图像的风格和黑白图像上色 这个
  • 电路布线问题(分支限界法)

    一 问题描述 印刷电路板将布线区域划分成n m个方格阵列 精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案 在布线时 电路只能沿直线或直角布线 为了避免线路相交 已布了线的方格做了封锁标记 其他线路不允许穿过被封锁的方
  • shell脚本实现自动监测主机运行状态及告警

    一 脚本详解 直接上脚本 取名zhuji sh 这里案例监控的cpu使用率 其他的参数像内存 磁盘使用率 流量可照葫芦画瓢进行修改 脚本可直接复制 个别参数有需要的话请自行修改 内容如下 bin bash 预先创建好一个空文件夹 最好把涉及
  • c#线程同步的源语

    Windows操作系统在内部使用线程执行块 Thread Execution Block TEB 这种数据结构来表示一个线程 该数据结构有90多个属性 包括线程标识 最近发生的错误 局部存储等 一 线程同步的基本概念 线程同步 gt 当有一
  • 英伟达P100 vs V100 GPU性能

    在选择计算资源时总是纠结不知道哪种显卡好用 请看下面一组对比 数据来源 link 实测效果 训练深层神经网络的时候 V100比P100快大约2倍 综上 V100算力更强劲 预算够的话就选V100
  • 学编程和学机器人有什么区别

    学编程和学机器人有什么区别 小孩的学习从古至今都是家长们相当关心和重视的一件事情 很多的家长在培养孩子的学习方面也可以说是相当的耐心的 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于学编程和学机器人有什么区别并不是很清楚
  • vue配置svg,图标显示不出来

    写在最前面 在Vue中使用svg主要靠webpack配置svg sprite loader来处理svg文件 如果有问题 配置流程按网上的教程一套下来或者直接是扒拉别人的代码还是 有问题的 需要一点webpack的知识进行排查 重点是排查的流
  • 调研

    发现网上可参考的资料太少了 最近有开个专题 文章 视频 从基础原理到编码实现 的想法 不知道是对心理学实验程序设计PSYCHTOOLBOX PTB 感兴趣的人多一些还是对信号处理算法感兴趣的人多一些呢
  • 面向对象的程序设计特点

    面向对象的程序设计特点主要有四个 抽象 封装 继承 多态 1 抽象 首先在面向对象的程序设计中 每一种事物都可以成为 对象 那么一个对象可以有多个特点 比如人有身高 体重等等 把一个事物对象的特点概括表示出来的过程叫做抽象 比如员工对象的薪
  • Vue3 父组件数据改变Echarts子组件图表没有变化

    一 问题 使用vue3写页面 引入一个echarts图 父组件数据改变 图表没有重新渲染 二 目标效果图 三 解决 数据变了 图表不变化 只需要2步 1 echarts图组件监听数据 数据改变 重新渲染 watch gt props cha