Vue Echarts报错Initialize failed: invalid dom.

在这里插入图片描述

报错原因

dom还没挂载完成,echarts.init() 就已经开始执行

解决方法

1、不要用created(用mounted),created这时候还只是创建了实例,但模板还没挂载完成

  • created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图
  • mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作

也就是说created()方法是在页面加载前调用,此时dom还未加载。所以当 有改变dom的时候用mounted, 没有改变dom操作就用created

2、使用create情况下使用延迟加载

(1)setTimeout延迟加载

setTimeout()方法用于在指定毫秒数后调用

通过延迟加载getChart()方法,使DOM先于getChart方法加载,为DOM加载提供时间

在这里插入图片描述
(2)使用nextTick延迟加载

  created() {
    this.$nextTick(()=>{
      this.getchart();
    })
  },

3、用mounted还是会报错
最近发现有些友友用了mounted还是会报错,有查了查解决办法,发现有博主说可以将document.getElementId获取dom换为使用ref指向dom元素

<template>
  <!--1.设置DOM容器-->
  <div id="Charts" ref="Echarts" ></div>
</template>
<script>
//2.引入echartjs
import * as echarts from "echarts";

export default {
  name: "chart",
  created() {
    setTimeout(() => {
      this.getChart()
    }, 1000);
  },
  methods:{
    getChart(){
      // 3.定义图标对象myChart,初始化echarts实例
      let myChart=echarts.init(this.$refs.Echarts)

      // 4.添加配置项
      let options={
        title: {  //标题
          text: 'ECharts 入门示例',  //主标题文本
          left:150,
          top:10,
        },
        tooltip: {},
        xAxis: {  //配置要在 X 轴显示的项:
          data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {},  //配置要在 Y 轴显示的项:
        series: [
          {
            name: '销量',
            type: 'bar', 
            data: [
              {"value":"5","date":"2022-4-8"},
              {"value":"8","date":"2023-4-8"},
            ],
          }
        ]
      }
      // 5.将配置给myChart
      myChart.setOption(options)
    }
  }

}
</script>

<style scoped>
#Charts{
  width: 500px;
  height: 500px;
  border: 1px solid red;
}
</style>
echarts报错"Initialize failed: invalid dom"通常是由于在初始化echarts实例时传入了无效的dom元素引起的。这个错误提示表明echarts无法找到指定的dom元素来渲染图表。 解决这个问题的方法是确保传入的dom元素存在并且正确。以下是一些可能导致这个错误的原因和解决方法: 1. 确保dom元素存在:检查你传入的dom元素的id是否正确,以及该元素是否存在于页面中。 2. 确保在dom元素加载完成后再初始化echarts:如果你在dom元素还未加载完成时就尝试初始化echarts实例,可能会导致找不到dom元素的错误。你可以在页面加载完成后再初始化echarts实例,或者使用Vue等框架的生命周期钩子函数来确保dom元素已经加载完成。 3. 确保在正确的位置初始化echarts:如果你的dom元素是动态生成的,确保在生成dom元素后再初始化echarts实例。 4. 确保引入了正确的echarts库:检查你引入的echarts库是否正确,可以尝试重新下载并引入最新版本的echarts库。 以下是一个示例代码,演示了如何正确初始化echarts实例: ```javascript // 确保dom元素存在并且在加载完成后再初始化echarts window.addEventListener('DOMContentLoaded', function() { // 获取dom元素 var dom = document.getElementById('main'); // 初始化echarts实例 var myChart = echarts.init(dom); // ... }); // 或者使用Vue的生命周期钩子函数 new Vue({ el: '#app', mounted: function() { // 获取dom元素 var dom = document.getElementById('main'); // 初始化echarts实例 var myChart = echarts.init(dom); // ... } }); ```
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麻辣翅尖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值