v-if 切换 el-tabs 加载 ECharts 错误问题(一)

在Vue项目中,使用Echarts和ElementUI的el-tabs组件时遇到问题:当从宽度为100%的tabsA切换到50%的tabsB,Echarts图表大小未随div更新。分析发现是组件复用导致Echart实例未销毁。解决方案是手动销毁前一个Echart实例后再创建新的。该问题涉及到Vue的v-if复用机制和Echarts的实例管理。
摘要由CSDN通过智能技术生成

一、项目需求:

        在vue项目中使用了 echarts 和 elementUI 的 el-tabs 组件;在同一个页面点击按钮,通过v-if切换加载两个不同的 tabs(tabsA和tabsB);tabsA 中用于画图的 div 宽度为100%;tabsB 中用于画图的 div 宽度为50%

二、现象描述:

        当从tabsA切换到tabsB时,div的大小变化了,但是div里面的Echarts图,数据变化了,图表的大小却还是切换之前的大小。

三、分析:

        两个tabs组件切换,Echart图,数据图更新,但是包裹Echart图的div样式没有更新,审查元素发现css更新了,但是页面看起来没有更新,再次刷新后更新了;

        刷新前,dom元素貌似没有销毁,这就是通过v-if切换两个相同的组件时,会出现组件复用,局部卸载的问题;复用了tab-pane中用于画图的div(EChart错误);

四、解决办法:

  在同一个dom 中创建多个实例时,需要销毁前一个,再创建后一个。

//1、销毁前一个实例   
this.$echarts.init(document.getElementById('echarts')).dispose();    
或 
this.$echarts.dispose(document.getElementById('echarts'));

//2、构建下一个实例
const myEcharts = this.$echarts.init(document.getElementById('echarts'));    

//3、然后对myEcharts进行setOption之类的操作就可以

相关问题,请查看:

下一篇 v-if 切换 el-tabs 加载 ECharts 错误问题(二)

      

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值