解决Echarts图表在div动态切换时不显示的问题

本文介绍如何在Vue项目中利用下拉框的change事件切换不同的div,并通过设置v-show属性实现图表容器的切换显示。针对切换后图表无法显示的问题,文章提供了具体的解决方案,即在容器切换之后重新初始化Echarts图表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单粗暴,先上图,大概长这样:

这里写图片描述

在使用vue时有遇到像上图下拉框change事件切换div,change切完后大概会变成这个样子:

这里写图片描述

上代码:

<div class="test">
    <p class="title">
        <select v-model="selected" v-on:change="change">
          <option v-for="option in options" v-bind:value="option.value">
            {{ option.text }}
          </option>
        </select>
    </p>

    <span>{{selected}}</span>
    <div id="timesharechart" v-show="isvisible" ></div>  
    <div id="receiveDispose" v-show="!isvisible"></div>  
</div>

<script>
    export default{
        name:"test",
        data(){
            return {
                selected: 'timeshare',
                options: [
                  { text: '分时警情', value: 'timeshare' },
                  { text: '接警与处置', value: 'receive' }
                ],
                isvisible:true
            }
        },


        methods:{
            change:function(){
                if(this.selected == "receive"){
                    this.isvisible = false;
                }else{
                    this.isvisible = true;
                }
            },
</script>

这里时我们为了确定当前显示的是哪个block,所以在data中引入了“selected”,方便其他操作,其实完全可以采用change事件和v-if指令来判断 true和false的方法来切换block。

code:

change:function(){
                if(this.isvisible == true){
                    this.isvisible = false;
                }else{
                    this.isvisible = true;
                }
            }

这样就变成了true, false。

那么问题来了:以上解决了change事件对div图表容器的切换显示内容,但是问题是切换后不显示图表,控制台报错:“Can’t get dom width or height”,检查了遍div容器是设置了大小的,上网一查才知道是因为echarts只能在显示的容器中渲染,解决办法:在容器切换之后再渲染图表,也就是在触发切换的事件中操作echarts初始化,我是这么解决的,在调用echart.init之前,给图形dom加上对应的宽度和高度。

drawCharts(){
     // 基于准备好的dom,初始化echarts实例,dom容器中需要在调用echart.init之前,必须给图形dom加上对应的宽度和高度,不然echarts不能渲染
     document.getElementById("container").style.display = "block";
     let myChart = this.$echarts.init(document.getElementById('container'));
                // 绘制图表
                receiveChart.setOption({});
   }

其他tab,button等切换方式如出一辙。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kirinlau

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值