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

 更新时间:2024年03月06日 10:38:07   作者:没有头发的战斗暴龙兽  
这篇文章主要介绍了在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可能要过一会儿才会出现。

总结

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

相关文章

  • VUE整合Echarts实现简单的数据可视化方式

    VUE整合Echarts实现简单的数据可视化方式

    文章介绍了ECharts的数据可视化功能和使用过程,首先,文章阐述了ECharts的功能和优势,接着,文章通过安装ECharts、创建容器、获取DOM对象、引入图表等代码片段等步骤详细介绍了柱状图和饼图的可视化过程,最后,文章介绍了主题的下载和应用,以提高可视化效果
    2026-04-04
  • vue实现轮播图的多种方式

    vue实现轮播图的多种方式

    这篇文章给大家介绍了vue实现轮播图的多种方式,文中给出了四种实现方式,并通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,感兴趣的朋友可以参考下
    2024-02-02
  • vue实现动态控制表格列的显示隐藏

    vue实现动态控制表格列的显示隐藏

    这篇文章主要为大家详细介绍了vue实现动态控制表格列的显示隐藏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue-swiper的使用教程

    vue-swiper的使用教程

    swiper是我之前做前端页面会用到的一个插件,我自己认为是非常好用的。这篇文章给大家介绍vue-swiper的使用教程,感兴趣的朋友一起看看吧
    2018-08-08
  • Vue消息订阅与发布过程

    Vue消息订阅与发布过程

    发布-订阅模式是一种设计模式,通过事件中心实现对象间的解耦通信,在Vue中,Vue2使用Vue实例作为事件总线,Vue3推荐使用mitt库,发布-订阅模式适用于广播通知、解耦组件和复杂状态管理,在选择工具时,建议根据场景选择合适的工具
    2025-11-11
  • vue element-ui v-for循环el-upload上传图片 动态添加、删除方式

    vue element-ui v-for循环el-upload上传图片 动态添加、删除方式

    这篇文章主要介绍了vue element-ui v-for循环el-upload上传图片 动态添加、删除方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue项目中icon乱码的问题及解决

    vue项目中icon乱码的问题及解决

    这篇文章主要介绍了vue项目中icon乱码的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • uniapp和webview之间的通信举例详解

    uniapp和webview之间的通信举例详解

    在uniapp中与webview的通信是一个常见且重要的功能,这篇文章主要介绍了uniapp和webview之间通信的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-06-06
  • vue2利用Bus.js如何实现非父子组件通信详解

    vue2利用Bus.js如何实现非父子组件通信详解

    这篇文章主要给大家介绍了关于vue2利用Bus.js如何实现非父子组件通信的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2017-08-08
  • vue实现带复选框的树形菜单

    vue实现带复选框的树形菜单

    这篇文章主要为大家详细介绍了vue实现带复选框的树形菜单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05

最新评论