在Vue项目里遇到多次渲染echart组件只显示一个的问题

达里尔
• 阅读 728

症状

  • vue项目 echarts中出现“There is a chart instance already initialized on the dom.”的警告
  • Vue页面多次渲染echarts封装的组件但只出现一个(如果这个为主要症状)

原因:

  1. 有可能是id冲突,如果你注册了N个组件,但是由于是复制粘贴过来的,导致你所有的组件文件echarts容器的id都是相同的,所以导致只渲染第一个echarts组件
  2. this.$refs未获取到dom元素
<div id="myChart" ref="myChart" style="width: 100%; height: 100%" />
// const myChart = echarts.init(document.getElementById('myChart'))
const myChart = echarts.init(this.$refs.myChart)

::: tip 这块尽量用 const myChart = echarts.init(this.$refs.myChart) 这种方式来初始化图表,解决id重复问题导致的只渲染第一个echarts图表组件 ::: 如果this.$refs.myChart没有获取到dom元素有可能是加载上出了问题,因为created生命周期里和watch监听里是获取不到this.$refs这种方式的dom元素的,可以用$nextTick来获取

this.$nextTick(()=>{
  this.$refs.bar.myChart(data)
})
点赞
收藏
评论区
推荐文章
晴空闲云 晴空闲云
2年前
vue3中基于script setup语法糖的$refs使用
在用vue3开发项目的时候,需要调用子组件的方法,于是想着用$refs来实现,但是我是使用scriptsetup语法糖,原先vue2的语法已经不适用了。于是一番折腾和查阅资料,终于搞定。vue2语法vue2语法在组件上设置ref属性后,在代码里可以通过this.$refs.ref值访问到对应的子组件。一个设置ref值的组件:html在js代码中可以通
Easter79 Easter79
2年前
vue + echart 实现中国地图 和 省市地图(可切换省份)
一.中国地图1.先导入echarts,然后再main.js里引入echarts//引入echartsimportechartsfrom'echarts'Vue.prototype.$echartsecharts//还要特别引入china.json,这样中国地图才会出现,不然只会出现右下角的南海诸岛importchinafr
Chase620 Chase620
3年前
Vue方向:prop验证
我们可以为组件的prop指定验证规则,如果传入的数据不符合要求,Vue会发出警告,这对于开发给他人使用的组件非常有用。要指定验证规则,需要用对象的形式来定义prop,而不能用字符串数组;1、验证父组件传递过来的数据类型props选项值如果为数据,则表示只是单纯的罗列父组件传递过来的数据而已如果props选项的值是一个对象,那么表示要验证接收的
Chase620 Chase620
3年前
Vue面试考点准备02
10\.谈谈你对keepalive的理解是什么?keepalive是Vue提供的一个抽象组件,用来对组件进行缓存,当组件切换时不会进行销毁,从而节省性能。由于是一个抽象组件,所以在页面渲染完毕后不会被渲染成一个DOM元素。1)include定义缓存白名单,keepalive会缓存命中的组件;2)exclude定义缓存黑名单
Easter79 Easter79
2年前
VUE+ElementUI布局随笔
1.elcontainer标签非必须。2.每一个vue文件中,所有的html代码都应该写在同一个dom中,否则会报错。3.elaside默认宽度为300px,可以通过在标签中修改width属性来调整。4.若routerview想通过name属性来指定渲染的组件,则在router.js中,该组件在注册时,必须是component
Stella981 Stella981
2年前
NoDom和Vue的区别
看到有朋友在问NoDom和Vue的区别,我在这里做一个较完整的回复,只能是较完整,因为我对Vue及其源码了解并不深刻。1、框架组成而言,NoDom强调模块,NoDom整个App就是一个大模块;Vue强调组件,它是把组件装到App中,而组件(component)和插件(plugin)往往会被很多开发者混淆;2、框架的核心性能在于编译和渲染,Vue的编译
程昱 程昱
1个月前
基于Vue3+Vite+TS,二次封装element-plus业务组件
基于Vue3ViteTS,二次封装elementplus业务组件download》quangneng.com/364/基于Vue3ViteTS,二次封装elementPlus业务组件的过程可以分为以下几个步骤:一、初始化Vite项目首先,你需要安装
乐和 乐和
4星期前
Vue3+Nuxt3打造SSR网站应用,0到1实现服务端渲染
Vue3Nuxt3打造SSR网站应用,0到1实现服务端渲染download》shanxueit.com/364/项目介绍项目名称:基于Vue3ViteTS的elementplus业务组件二次封装一、项目背景和目标随着前端技术的不断发展,Vue3、Vi
linbojue linbojue
4星期前
Vue3+Nuxt3打造SSR网站应用,0到1实现服务端渲染
Vue3Nuxt3打造SSR网站应用,0到1实现服务端渲染download》shanxueit.com/364/项目介绍项目名称:基于Vue3ViteTS的elementplus业务组件二次封装一、项目背景和目标随着前端技术的不断发展,Vue3、Vi
乐和 乐和
3星期前
前端框架及项目面试-聚焦Vue、React、Webpack
前端框架及项目面试-聚焦Vue、React、Webpackdownload》shanxueit.com/461/什么是Vue组件?如何创建一个Vue组件?Vue组件是Vue.js中可复用的、独立的模块,用于封装特定功能的HTML、CSS和JavaScrip
达里尔
达里尔
Lv1
大部分都是自己工作中遇到的问题,懒得用脑子记就写下来,主要是给自己看的,遇到的时候直接复制粘贴,如果对他人有帮助的话就更好了
文章
23
粉丝
3
获赞
13