当前位置: 首页 > article >正文

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

项目情况用到了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>

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


http://www.kler.cn/a/293465.html

相关文章:

  • qt QKeySequence详解
  • MoneyPrinterTurbo – 开源的AI短视频生成工具
  • [CKS] K8S NetworkPolicy Set Up
  • 第74期 | GPTSecurity周报
  • 应用程序部署(IIS的相关使用,sql server的相关使用)
  • 5G时代的关键元件:射频微波MLCCs市场前景广阔
  • 5G移动网络运维实验(训)室解决方案
  • 逻辑回归与线性回归的目标函数和应用场景比较
  • 坐牢第三十六天(QT)
  • iOS——Block与内存管理
  • Kafka 实战演练:创建、配置与测试 Kafka全面教程
  • 《Python爬虫逆向实战》加密方法远程调用(RPC)
  • TRIZ在充电桩安全中的应用探究
  • Java 入门指南:Java 并发编程 —— Fork/Join 框架 实现任务的拆分与合并
  • 探索PDF的奥秘:pdfrw库的神奇之旅
  • 2024,中国服务器操作系统迎云智主升浪
  • 鸿蒙开发5.0【高级图表实现】 解决方案
  • c++的类和对象
  • vue-seamless-scroll(二)点击事件
  • 为什么深度学习用GPU而不是CPU
  • electron 客户端 windows linux(麒麟V10)多系统离线打包 最新版 <二>
  • FPGA开发:Verilog基础语法
  • 如何进行不同数据库的集群操作?--从部署谈起,今天来看MySQL和NoSql数据库Redis的集群
  • FFMPEG -- 音频开发
  • 初识命名空间
  • S7-PLC