在项目中曾遇到过这样的问题:多个tab切换echarts图表引发的问题,显示不全或在另一个tab内显示,网上很多说用v-if,试验了多次均无效果,后来使用echarts实例销毁方法dispose和延时就可以了。
以下项目是vue代码
//引入echarts基本模板
var echarts = require('echarts/lib/echarts')
//项目是vue代码
mainTab(id) {
this.clearEcharts(id)//关键步骤:在这之前销毁其他tab的echarts实例
if (id === "1") {//第1个tab栏
setTimeout(() => {
this.echartsPie()//饼图
},500)
}else if (id === "2") {//第2个tab栏
setTimeout(() => {
this.initEcharts()//雷达图
},500)
}else if (id === "3") {//第3个tab栏
setTimeout(() => {
this.configPie()//配置饼图
},500)
}
},
//销毁其他tab栏的echarts实例,避免重复显示
clearEcharts(id = '0') {
/*第1个tab栏:echarts-pie(饼图) 第2个tab栏:echarts(雷达图)
第3个tab栏:config-one
主要使用dispose,在切换tab栏之前,销毁其他tab栏的echarts的实例,这样就不有错误显示或重复显示了*/
var domPie = document.getElementById("echarts-pie")
var domEcharts = document.getElementById("echarts")
var domConfigOne = document.getElementById("config-one")
if (id === '0') {//点击切换至第1个tab栏,销毁其他两个tab的echarts实例
domConfigOne&&echarts.dispose(domConfigOne)
domEcharts&&echarts.dispose(domEcharts)
} else if (id === '1') {
domPie&&echarts.dispose(domPie)
domConfigOne&&echarts.dispose(domConfigOne)
} else if (id === '2') {
domPie&&echarts.dispose(domPie)
domEcharts&&echarts.dispose(domEcharts)
}
}