(已解决)echarts在vue中路由跳转后图表无法出现,附源码

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、无法出现图表的原因

1. 如果未实例化则进行实例化过程, 在此期间会在div容器生成一个_echarts_instance_属性, 该属性值其实就是当前echarts的ID, 然后进行后边的渲染操作.
2. 当页面跳转或者切换时,echarts会根据该属性进行判断是否重新进行渲染图表, echarts会先匹配改div容器上的_echarts_instance_属性值是否与实例对象的ID一样,如果一样,那么echarts将无法进行重新渲染。反之亦然。
3. 根据此特性进行入手,将该属性值设置为空。在echarts匹配的过程中重新渲染图表。

在这里插入图片描述
在这里插入图片描述

二、解决办法

第一种

在图表渲染完成之后,将该div的_echarts_instance_属性设置为空,让其无法匹配从而进行重新渲染。

document.getElementById('main').setAttribute('_echarts_instance_', '');

代码如下:

<template>
  <div class="home">
    <div id="main"></div>
  </div>
</template>

<script>
import * as echarts from 'echarts';

export default {
  name: 'Home',
  components: {
  },
  mounted () {

    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('main'));
    // 绘制图表
    myChart.setOption({
      title: {
        text: 'ECharts 入门示例'
      },
      tooltip: {},
      xAxis: {
        data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
      },
      yAxis: {},
      series: [
        {
          name: '销量',
          type: 'bar',
          data: [5, 20, 36, 10, 10, 20]
        }
      ]
    });
    document.getElementById('main').setAttribute('_echarts_instance_', '');
  },
}
</script>
<style lang="scss" scoped>
#main {
  width: 600px;
  height: 600px;
}
</style>

在这里插入图片描述

第二种

使用动态ID,实质上的原理跟第一种的办法一样。

<div class="echarts" :id="main"></div>
 this.main = "main" + parseInt(Math.random() * 100)

代码如下:

<template>
  <div class="home">
    <div
      :id="main"
      class="main"
    ></div>
  </div>
</template>

<script>
import * as echarts from 'echarts';

export default {
  name: 'Home',
  components: {
  },
  data () {
    return {
      main: ""
    }
  },
  mounted () {
    this.main = "main" + parseInt(Math.random() * 100)
    this.$nextTick(() => {
      // 基于准备好的dom,初始化echarts实例
      var myChart = echarts.init(document.getElementById(this.main));
      // 绘制图表
      myChart.setOption({
        title: {
          text: 'ECharts 入门示例'
        },
        tooltip: {},
        xAxis: {
          data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {},
        series: [
          {
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
          }
        ]
      });
    })
  },
}
</script>
<style lang="scss" scoped>
.main {
  width: 600px;
  height: 600px;
}
</style>

在这里插入图片描述


总结

个人的理解,如有出入欢迎评论留言喔!!!
在这里插入图片描述

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值