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

来源:互联网 发布:垓下歌与大风歌 知乎 编辑:程序博客网 时间:2024/05/19 14:51

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

这里写图片描述

在使用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等切换方式如出一辙。

阅读全文
0 0
原创粉丝点击