echart.js 报错:invalid dom

今天药忘吃喽~ 2021-09-07 16:16 744阅读 0赞

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

问题出现原因

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

解决思路

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

解决办法(js版本)

解决办法:

  1. // 声明定时器
  2. var timer = null;
  3. // 检查dom是否执行完成
  4. function check() {
  5. let dom = document.getElementById('chart');
  6. if(dom) {
  7. // 执行dom加载完成后的操作,例如echart的初始化操作
  8. echart.init(document.getElementById('chart'));
  9. // 清除定时器
  10. if(!timer) {
  11. clearTimeout(timer);
  12. }
  13. } else {
  14. // 自我调用
  15. timer = setTimeout(check, 0);
  16. }
  17. }
  18. // 首次执行
  19. check()

解决办法(vue版本)

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

  1. this.$nextTick(() => { //页面dom渲染完成后再去获取dom,避免出现invalid dom的区别
  2. var chartDom = $("#receiptLine")[0];
  3. var myChart = echarts.init(chartDom);
  4. this.receiptOption = {
  5. xAxis: {
  6. type: 'category',
  7. data: []
  8. },
  9. yAxis: {
  10. type: 'value'
  11. },
  12. series: [{
  13. data: [],
  14. type: 'line'
  15. }]
  16. };
  17. for (var index = 0; index < data.Items.length; index++) {
  18. this.receiptOption.series[0].data.push(data.Items[index].RealNum);
  19. this.receiptOption.xAxis.data.push(data.Items[index].Month);
  20. }
  21. console.log(this.receiptOption);
  22. //当数据量过大时,如果数据没有获取完成就开始setOption就会出现报错:因此延时处理setOption
  23. setTimeout(() => {
  24. myChart.setOption(this.receiptOption);
  25. }, 100)
  26. })

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

发表评论

表情:
评论列表 (有 0 条评论,744人围观)

还没有评论,来说两句吧...

相关阅读