vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue mounted中仍然加载渲染不出echarts方法

在Vue的mounted中仍然加载渲染不出echarts的方法问题

作者:没有头发的战斗暴龙兽

这篇文章主要介绍了在Vue的mounted中仍然加载渲染不出echarts的方法问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题

问题的主要原因是在mounted中无法获取到dom元素

<template>
  <div>
    <div ref="echarts"></div>
  </div>
</template>
 
<script>
  export default {
    mounted () {
      console.log(this.$$refs.echarts);  // undefined
    },
  }
</script>

知道了问题在哪里,那就从根源下手:

这是因为某些因素使得在mounted中还并没有生成dom,所以结果自然就是undefined,那怎样才能获取到这个dom元素?

解决方法1(完美解决+超简单)

直接把初始化方法写在updated生命周期中

    methods: {
      initEcharts() {
        echarts.init(this.$refs.echarts).setOption(option);
      }
    },
    updated() {
      this.initEcharts();
    }

解决方法2(完美解决+复杂)

使用自定义指令

我们自己设置一个自定义属性,去监测dom是什么时候生成的,在dom生成的时候立刻将echarts渲染到页面上。

这个方法完美解决了加定时器有延时的缺点。

<template>
  <div>
    <div ref="echarts" v-init="option"></div>
  </div>
</template>
 
<script>
import * as echarts from 'echarts';
  export default {
    data() {
      return {
        option: {
          title: {
          text: 'ECharts 入门示例'
        },
        tooltip: {},
        legend: {
          data: ['销量']
        },
        xAxis: {
          data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {},
        series: [
          {
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
          }
        ]
        }
      }
    },
    directives: {
      init: {
        // inserted: 在dom元素成功插入父节点时的钩子函数
        inserted(el, binding) {
          echarts.init(el).setOption(binding.value);
        }
      }
    },
  }
</script>

解决方法3(有缺陷+超简单)

在初始化方法外面套一层定时器

在初始化方法外面套一层定时器:等dom生成了之后我们再去获取这个dom元素

    methods: {
      initEcharts() {
        echarts.init(this.$refs.echarts).setOption(option);
      }
    },
    mounted () {
      setTimeout(() => {
        this.initEcharts();
      }, 500)
    },

这个方法有一个很大的缺点,就是我们要自己去设置定时器的时间,就有可能会造成页面的渲染和echarts的渲染不同步,页面显示出来了之后echarts可能要过一会儿才会出现。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文