Echart报错Initalize failed:invalid dom

今天在工作的时候使用到了Echart遇到了一点小问题总结一下。

Echarts的基本安装和小案例

安装

npm install echarts --save

案例

在vue中使用ECharts

导入

import * as echarts from 'echarts';

首先准备一个容器

<div id="myChart" style="width: 600px; height: 400px"></div>

然后通过js进行渲染

mounted () {
        this.drawLine();
    },
    methods: {
        drawLine () {
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('myChart'));
            // 绘制图表
            myChart.setOption({
                title: {
                    text: 'ECharts 入门示例'
                },
                tooltip: {},
                xAxis: {
                    data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
                },
                yAxis: {},
                series: [
                    {
                        name: '销量',
                        type: 'bar',
                        data: [5, 20, 36, 10, 10, 20]
                    }
                ]
            });
        }
    }

注意:我们在使用过程中要将函数调用放到页面渲染之前否则会产生DOM无法渲染的错误

报错 Initalize failed:invalid dom

在不管是在原神还是Vue中我们遇到 Initalize failed:invalid dom的原因其实很简单,那就是我们引入 Echarts是在Dom还没加载的时候,option 获取元素,echarts.init(document.getElementById(“bottomChartData”))就开始检测dom,并尝试去获取它,但是在vue中引用echarts的中,发现在模板dom还没加载的时候echarts.init() 就已经开始执行,所以会报错 Initialize failed: invalid dom

解决办法也很简单:

(1)使用jquery提供的document ready 函数, 引入jquery.min.js文件,将自己的js代码放入函数中即可解决。 (建议使用这种方法,将js代码放在head标签内部,使你的代码可读性更强,同时便于维护。)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Echarts入门案例</title>
<!-- 引入 开发环境的echarts.js -->
<script src="js/echarts.js"></script>
<script src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
	/* js代码放在body之前,会导致初始化dom失败,原因是js在dom容器被创建之前执行,此时用js去获取还未被创建的dom,肯定就报错了。
	        解决方法,
			1.使用jquery的 document ready 函数[防止文档在完全加载(就绪)之前运行 jQuery(或者自定义JS) 代码,即在 DOM 加载完成后才可以对 DOM 进行操作。]
			2.此部分js代码放置于<body>后面
	*/
	$(document).ready(function(){
    
    
		//初始化echarts实例
		var myChart = echarts.init(document.getElementById('main'));
		//指定图表配置项和数据
		var option = {
    
    
				title:{
    
    
					text:'Echarts入门案例'
				},
				tooltip:{
    
    },
				legend:{
    
    
					data:['销量']
				},
				xAxis:{
    
    
					data:["苹果","香蕉","梨","橘子","火龙果","西瓜"]
				},
				yAxis:{
    
    },
				series:[{
    
    
					name:'销量',
					type:'bar',
					data: [6,18,15,10,28,45]
				}]
		};
		// 使用指定的配置项和数据显示图表。
		myChart.setOption(option);
	});
</script>
<!-- 声明DOM容器对象,为ECharts准备一个具备大小(宽高)的Dom -->
<style type="text/css">
#main{
    
    
	width: 600px;
	height:400px;
}
</style>
</head>
<body>
	<div id="main">
	</div>
</body>
</html>

(2)将操作相应dom元素的js代码放到body之后,即让该dom就绪后再操作它。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>测试页面</title>
<!-- 引入 开发环境的echarts.js -->
<script src="js/echarts.js"></script>
<!-- 声明DOM容器对象,为ECharts准备一个具备大小(宽高)的Dom -->
<style type="text/css">
#main{
    
    
	width: 600px;
	height:400px;
}
</style>
</head>
<body>
	<div id="main">
	</div>
</body>
<script type="text/javascript">
		//初始化echarts实例
		var myChart = echarts.init(document.getElementById('main'));
		//指定图表配置项和数据
		var option = {
    
    
				title:{
    
    
					text:'Echarts入门案例'
				},
				tooltip:{
    
    },
				legend:{
    
    
					data:['销量']
				},
				xAxis:{
    
    
					data:["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
				},
				yAxis:{
    
    },
				series:[{
    
    
					name:'销量',
					type:'bar',
					data: [6,18,15,10,28,45]
				}]
		};
		//用指定的配置项和数据显示图表。
		myChart.setOption(option);
</script>
</html>

猜你喜欢

转载自blog.csdn.net/qq_46133833/article/details/126112574