echarts动态切换数据渲染(vue3 + echarts)

1 篇文章 0 订阅

项目情况用到了vue3+echarts5。初次拿到数据渲染没有问题。需求是:进行数据筛选,图表也要进行相对应的数据切换。

思路

  • echarts数据变换后,图表没进行切换。是因为没办法echarts没办法直接渲染更新后的数据
  • 数据切换后直接再去用init会报错,原因是(你已经渲染过了,已经存在了这个dom元素。所以不允许)
  • 那我们就可以定义一个status。初次为true,代表当前这个echarts还没有init dom元素。然后如果init之后直接把status变为false。之后只需要用到setOption就可以了

解决方法

const myChart1 = ref<any>();
const isDomLoading = ref(true); //echart是否初始化
//获取echart数据
const getChartData = async (payload?: any) => {
	//可以在这里处理数据
	
	if (isDomLoading.value) {
		myChart1.value = echarts.init(document.getElementById('chartDom'));//如果没数据就初次渲染
		initChart();//初始化
	}else{
		myChart1.value.setOption(initChartData());//如果已经渲染过就setOption更新数据
	}
}


//定义echarts option参数
const initChartData = () => {
    let option = {
        xAxis: {
            type: 'category',
            data: chartDomData.value,
            nameTruncate: {
                maxWidth: 9,
                ellipsis: '...',
            },
            triggerEvent: true,
            axisLabel: {
                show: true,
                interval: 0,
                width: 80,
                overflow: 'truncate',
                ellipsis: '...',
            },
            axisLine: {
                show: false,
            },
            axisTick: {
                show: false,
            },
            splitLine: {
                show: false,
            },
        },
        yAxis: {
            type: 'value',
            show: false,
            axisLine: {
                //y轴
                show: false,
            },
            axisTick: {
                //y轴刻度线
                show: false,
            },
            splitLine: {
                //网格线
                show: false,
            },
        },
        series: [
            {
                data: chartDomData.value,
                selectedMode: 'single',
                select: {
                    itemStyle: {
                        borderColor: '#000',
                        borderType: 'dashed',
                    },
                },
                type: 'bar',
                label: {
                    show: true,
                },
            },
        ],
    };
    return option;
};
//初始化图表
const initChart = () => {
	myChart1.value.setOption(initChartData());
	isDomLoading.value = false;
}
 				<div
                    class="box"
                    id="chartDom"
                    ref="chartDom"
                ></div>

如果理解的不对,可以告诉我。我更改一下。一起进步

Vue 3中,如果你使用Dialog弹窗展示ECharts图表,并且想要在数据更新时刷新图表内容,可能会遇到一些挑战。由于ECharts是基于JavaScript数据可视化库,而Vue数据绑定并不直接支持DOM操作,特别是图表这类动态更新的需求。 当你在Dialog组件内部初始化ECharts实例并渲染图表时,你需要手动处理数据变化和图表刷新。通常的做法是: 1. 数据绑定:确保你在Vue组件里正确地绑定了数据源。当数据发生变化时,通过`this.$set`方法手动触发数据响应,因为ECharts不会自动检测数据变化。 ```javascript data() { return { chartData: [], // 示例数据 } }, methods: { updateChartData(newData) { this.chartData = newData; this.$set(this, 'chartData', newData); // 触发数据响应 this.updateChart(); // 更新图表方法 }, } ``` 2. 更新图表:编写一个`updateChart`方法,在这个方法里,你可以销毁旧的图表实例,然后重新创建新的实例,并传入最新的数据。 ```javascript methods: { updateChart() { if (this.myChart) { // 如果已有图表实例 this.myChart.dispose(); // 销毁旧图表 } const myChart = echarts.init(document.getElementById('myChart')); // 初始化新图表 myChart.setOption({ data: this.chartData, }); } } ``` 3. 弹窗显示和隐藏:确保在Dialog的显示和隐藏事件中,适当地切换图表是否需要刷新。例如: ```javascript methods: { showDialog() { this.dialogVisible = true; // 显示对话框 this.updateChart(); }, hideDialog() { this.dialogVisible = false; // 隐藏对话框 }, } ``` 记得在Dialog的模板里监听数据源的变化,以及`showDialog`和`hideDialog`方法的调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值