Echarts 在vue3x中使用(包括动态数据变化)

网上的复制粘贴太多,大佬也太多,写个东西反正就是我自己记录的,你看不看得懂没关系

我真的吐了,自己记录请不要公开

我是永远的萌新,各种这样不会那也不会,看那种一半的作业看的真血压高

<template>
	<div class="my-chart-page-box">
		<div class="char-box" :id='chartName'></div>
	</div>
</template>

<script>
	// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
	import * as echarts from 'echarts/core';
	// 引入柱状图图表,图表后缀都为 Chart
	import {
		//这个是折线图
		LineChart
	} from 'echarts/charts';
	// 引入提示框,标题,直角坐标系,数据集,内置数据转换器组件,组件后缀都为 Component
	import {
		TitleComponent,
		TooltipComponent,
		GridComponent,
		DatasetComponent,
		LegendComponent,
		TransformComponent,
		DataZoomComponent
	} from 'echarts/components';
	// 标签自动布局,全局过渡动画等特性
	import {
		LabelLayout,
		UniversalTransition
	} from 'echarts/features';
	// 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
	import {
		CanvasRenderer
	} from 'echarts/renderers';

	// 注册必须的组件
	echarts.use([
		TitleComponent,
		TooltipComponent,
		GridComponent,
		DatasetComponent,
		LegendComponent,
		TransformComponent,
		LineChart,
		LabelLayout,
		UniversalTransition,
		CanvasRenderer,
		DataZoomComponent
	]);

	import {
		reactive,
		toRefs,
		onMounted,
		onUnmounted,
		watch
	} from "vue";

	export default {
		name: 'chart',
		props: {
			chartName: String,
			chartData: Object,
		},
		setup(props) {
			const dataMap = reactive({
				chartName: props.chartName,
				chartData: props.chartData,
				option: {},
			})

			// 基础数据
			const chartPrepare = () => {
				console.log(dataMap.chartData);
				//图表的id父级传过来 防止一个页面多个图不绘制,还能防止vue3.x 还有打包之后初始化不绘制的问题  原理我也不知道  有大佬告知一下最好  
				dataMap.myChart = echarts.init(document.getElementById(dataMap.chartName));

				// 绘制图表需要的数据
				dataMap.option = {
					xAxis: {
						type: 'category',
						boundaryGap: false,
					},
					yAxis: {
						type: 'value'
					},
					series: [{
						data: dataMap.chartData,
						type: 'line'
					}]
				}
			}
			// 绘制图表
			const chartOpen = () => {
				// 这个true可以看官方文档 
				dataMap.myChart.setOption(dataMap.option, true);

				// window.onresize = function() { // 自适应大小
				// 这个自适应大小我反正疯狂报错,应该是resize() 是一个需要配置的还是什么的玩意 搞不明白暂时不用了
				// 	dataMap.myChart.resize();
				// };
			}

			onMounted(() => {
				// 基础数据
				chartPrepare()
				// 绘制图表
				chartOpen()
			});

			watch(() => props.chartData,
				(count, prevCount) => {
					// 监听数据变了  就重新绘制一遍  也就是大佬们说的  "切记,数据变化后需要再次调init方法刷线图表"
					// 绘制图表
					chartOpen()
					console.log(count, prevCount);
				}, {
					deep: true
				}
			)

			onUnmounted(() => {
				//销毁
				echarts.dispose(dataMap.myChart);
				dataMap.myChart = null;
			})

			return {
				...toRefs(dataMap),
			}
		}
	}
</script>

<style lang="less" scoped>
	.my-chart-page-box {
		width: 100%;
		height: 100%;

		>.char-box {
			width: 100%;
			height: 100%;
		}
	}
</style>

我写的不敢保证全部小白看懂,但是我会尽量让更多的人看懂,而不是我就自己记录一下,你爱看得懂就看,看不懂就拉倒

我最烦的一句话就是,你复制就好

先不说授人与鱼不如授人与渔,复制能用的都少之极少

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
vue使用echarts动态绑定数据,可以通过以下步骤实现: 1. 安装echarts 在终端运行以下命令: ``` npm install echarts --save ``` 2. 引入echarts 在需要使用echarts的组件,引入echarts: ```javascript import echarts from 'echarts' ``` 3. 创建echarts实例 在组件的mounted()生命周期方法,创建echarts实例: ```javascript mounted() { this.chart = echarts.init(this.$refs.chart) }, ``` 其,$refs是vue的一个属性,可以获取到组件的DOM元素。 4. 绑定数据 在组件定义一个数据对象,用来存放echarts需要的数据,然后将数据绑定到echarts实例上: ```javascript data() { return { chartData: { xData: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], yData: [820, 932, 901, 934, 1290, 1330, 1320] } } }, mounted() { this.chart = echarts.init(this.$refs.chart) this.chart.setOption({ xAxis: { type: 'category', data: this.chartData.xData }, yAxis: { type: 'value' }, series: [{ data: this.chartData.yData, type: 'line' }] }) }, ``` 在以上代码,我们定义了一个数据对象chartData,其包含了x轴和y轴的数据。在mounted()方法,我们将数据绑定到echarts实例上,设置x轴和y轴的数据以及图表类型。这样,echarts图表就可以根据绑定的数据进行渲染。 5. 监听数据变化 如果需要动态更新echarts图表,可以在数据变化时,重新设置echarts实例的option: ```javascript watch: { 'chartData.yData': function() { this.chart.setOption({ series: [{ data: this.chartData.yData, type: 'line' }] }) } } ``` 在以上代码,我们监听了chartData.yData的变化,当数据变化时,重新设置echarts实例的series属性,从而实现动态更新图表的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值