echart.js 报错:invalid dom

本文介绍了在使用Echarts.js时遇到的`invaliddom`错误的原因和解决方法。问题源于DOM元素未加载完毕就尝试初始化Echarts。解决思路包括使用定时器检查DOM是否加载完成,或者在Vue环境中利用`$nextTick`确保DOM渲染完成后再进行初始化。文中还对比了原生JS和jQuery获取DOM的区别,并提供了具体的代码示例。
摘要由CSDN通过智能技术生成

今天后端同事问我一个echart.js初始化时,报错:invalid dom

问题出现原因

问题出现原因:dom没有加载出来,就开始了echart.init(dom);

解决思路

解决思路:如何监听dom节点已经加载。

解决办法(js版本)

解决办法:

//  声明定时器
var timer = null;
//  检查dom是否执行完成
function check() {
    let dom = document.getElementById('chart');
    if(dom) {
         //  执行dom加载完成后的操作,例如echart的初始化操作
        echart.init(document.getElementById('chart'));
        //  清除定时器
        if(!timer) {
            clearTimeout(timer);
        }
    } else {
        //  自我调用
        timer = setTimeout(check, 0);
    }
}
//  首次执行
check()

解决办法(vue版本)

如果是vue的话,可以通过this.$nextTick来处理dom渲染完成后进行的操作
jq获取的dom跟原生js获取的dom之间的区别:
document.getElementById("receiptLine")等同于$("#receiptLine")[0]

this.$nextTick(() => {//页面dom渲染完成后再去获取dom,避免出现invalid dom的区别
    var chartDom = $("#receiptLine")[0];
    var myChart = echarts.init(chartDom);
    this.receiptOption = {
        xAxis: {
            type: 'category',
            data: []
        },
        yAxis: {
            type: 'value'
        },
        series: [{
            data: [],
            type: 'line'
        }]
    };
    for (var index = 0; index < data.Items.length; index++) {
        this.receiptOption.series[0].data.push(data.Items[index].RealNum);
        this.receiptOption.xAxis.data.push(data.Items[index].Month);
    }
    console.log(this.receiptOption);
    //当数据量过大时,如果数据没有获取完成就开始setOption就会出现报错:因此延时处理setOption
    setTimeout(() => {
        myChart.setOption(this.receiptOption);
    }, 100)
})

文章出处:
echart.init报错:https://blog.csdn.net/zhangjing0320/article/details/84992985

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叶浩成520

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

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

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

打赏作者

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

抵扣说明:

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

余额充值