原因分析
首先echarts的创建方式,是通过获取元素的id初始化echarts实例,所以在渲染时,两个元素的id相同只会出现一个echarts图表
<div id="block2-1" style="width: 100%;height: 100%;"></div>
const charts = echarts.init(document.getElementById('block2-1'));
解决办法
1、通过vue的ref去获取元素
<div ref="block2_1" style="width:300px; height: 300px;"></div>
const charts = echarts.init(this.$refs.block2_1)
使用ref我们就不需要获取DOM结点了。$ref如果注册在元素上,它指向的就是DOM元素,如果注册在组件上,他指向的就是组件的实例。
2、动态绑定id
因为两个相同的id所以会覆盖,故我们设置不同的id即可。
关于id的设置,我们可以使用父组件传过来的不同的值,也可以写个不重复的随机数进行赋值,主要是能保证两个组件id不同就行
<div :id="this.elementId" style="width:300px; height: 300px;"></div>
const charts = echarts.init(document.getElementById(this.elementId))
通过以上两种方法就可以解决这个问题