element-ui el-tabs 使用echarts切换时无法正常显示图表

在这里插入图片描述

echarts图表来回切换时会出现宽度失效的问题,导致图表变形,用v-if或者lazy就能解决。
子组件页面
<template>
  <div style="height:600px;width:100%"></div>
</template>

<script>
export default {
  name: "echarts",
  props: {
    tmpData:{
      type:Array,
      default (){
        return [62, 82, 91, 84, 109, 110, 120]
      }
    }
  },
  data: function() {
    return {
      echart:null
    };
  },
  mounted: function() {
    this.initChart();
  },
  methods:{
    drawPic(){
      var seriesLabel = {
          normal: {
            position:'top',
              show: true,
              textBorderWidth: 1,
              fontSize: 12,
              textStyle:{
                color: '#6700cb'
              }
          }
      }
      var tmp = this.tmpData;
      this.chart.setOption({
        tooltip:{
              trigger: 'axis',
              axisPointer : {            // 坐标轴指示器,坐标轴触发有效
                  type : 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
              }
        },
        grid: {//整个图的位置调整
              left: '0',
              right: '0',
              top: '3%',
//					        containLabel: true//y轴数据的显示
        },
        xAxis:{
              type : 'category',
              name: '日期',
              data : ['7-1','7-2','7-3','7-4','7-5','7-6','7-7','7-8','7-9']
        },
        yAxis:{},
        series : [
              {
                  type:'bar',
                  barWidth:10,
                  label:seriesLabel,
                    data:tmp,
                itemStyle:{
                        normal:{
                            color:new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                                offset:0,
                                color:'#6600cc'
                            }, {
                                offset:1,
                                color:'#cc00cc'
                            }]),
                        }
                    }
              }
          ]
      })
    },
    initChart: function() {
      this.chart = this.$echarts.init(this.$el);
      this.drawPic();
    }
  }
};
</script>

<style scoped>
</style>

父组件页面

html代码

<el-tabs v-model="activeName">
    <el-tab-pane label="收益(元)" name="first">
        <echarts v-if="'first'==activeName" :tmpData="tmpData1"></echarts>
    </el-tab-pane>
    <el-tab-pane label="订单数" name="second">
         <echarts v-if="'second'==activeName" :tmpData="tmpData2"></echarts>
    </el-tab-pane>
 </el-tabs>

js代码

 data(){
	return{
      activeName:'first',
      tmpData1:[62, 82, 91, 84, 109, 110, 120,80,60],
      tmpData2:[62, 82, 91, 84, 109, 99, 110,120,42]
	}
 }

参考与:https://blog.csdn.net/SanJiK/article/details/79764429

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
el-tabs切换导致echarts图表样式错乱的解决方案是通过改变页面大小来解决的。当切换选项卡el-tabs中不显示的tab页会有一个display: none的样式,这导致echarts无法获取宽度,从而导致图表样式错乱。解决方法是在切换tabs后,改变页面大小,再次切换tabs,这样echarts图表的宽度就能正确计算并恢复正常。 以下是一个示例代码,演示了如何使用el-tabs切换echarts图表: ```html <template> <div> <el-tabs v-model="activeTab" @tab-click="handleTabClick"> <el-tab-pane label="Tab 1"> <div ref="chart1" style="width: 100%; height: 400px;"></div> </el-tab-pane> <el-tab-pane label="Tab 2"> <div ref="chart2" style="width: 100%; height: 400px;"></div> </el-tab-pane> </el-tabs> </div> </template> <script> import echarts from 'echarts'; export default { data() { return { activeTab: 'Tab 1', chart1: null, chart2: null }; }, mounted() { this.initChart(); }, methods: { initChart() { this.chart1 = echarts.init(this.$refs.chart1); this.chart2 = echarts.init(this.$refs.chart2); // 初始化图表数据和样式 // ... // 在切换tabs后,改变页面大小,再次切换tabs this.$nextTick(() => { window.addEventListener('resize', this.handleResize); }); }, handleTabClick(tab) { // 切换tabs更新图表数据和样式 // ... }, handleResize() { // 改变页面大小后重新计算图表宽度 this.chart1.resize(); this.chart2.resize(); } }, beforeDestroy() { window.removeEventListener('resize', this.handleResize); } }; </script> ``` 在上述代码中,我们使用el-tabs组件来实现选项卡切换,每个选项卡对应一个echarts图表。在mounted钩子函数中,我们初始化了echarts图表,并在切换tabs后通过监听resize事件来重新计算图表宽度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值