VUE中集成echarts时 getAttribute of null错误
错误
[Vue warn]: Error in mounted hook: "TypeError: Cannot read property 'getAttribute' of null"
错误场景一:
错误提示:
在运行Vue项目时出现了上述错误,出现该错误的原因是Echarts的图形容器还未生成就对其进行了初始化所造成的,代码如下:
// 基于准备好的dom,初始化echarts实例
var bar_dv = document.getElementById('bar_dv');
let myChart = this.$echarts.init(bar_dv)
解决办法:
1、利用Vue中的ref和$refs 来代替document.getElementById()获取该图形容器对象,代码如下:
<template>
<div id="bar_dv"
ref="chart">
</div>
</template>
<script>
/*默认数据*/
const DEFAULT_DATA = {
xAxisData: ["重庆", "西安", "福州", "杭州", "长沙", "南昌"],
yAxisData: [43, 41.8, 41.7, 41.6, 40.6, 40.6],
};
export default {
name: 'EHistogram',
/*接收外部传入一个label变量*/
props: ['label', 'itemColor', 'backgroundColor', 'itemDataType', 'xAxisName', 'yAxisName', 'eventType'],
data() {
return {
msg: 'Welcome to Your Vue.js App',
}
},
mounted() {
this.drawLine();
},
methods: {
drawLine() {
// 基于准备好的dom,初始化echarts实例
//var bar_dv = document.getElementById('bar_dv');
var bar_dv = this.$refs.chart;
if (bar_dv){
console.log('bar_dv不为空');
let myChart = this.$echarts.init(bar_dv)
// 绘制图表 '火炉省会城市极端高温对比'
myChart.setOption({
title: {text: this.label},
color: [this.itemColor],
backgroundColor: [this.backgroundColor],
tooltip: {},
xAxis: {
name: this.xAxisName,
data: DEFAULT_DATA.xAxisData,
nameTextStyle: {
fontSize: 14,
fontWeight: 'bolder'
}
},
yAxis: {
name: this.yAxisName,
nameTextStyle: {
fontSize: 14,
fontWeight: 'bolder'
}
},
series: [{
name: this.itemDataType,
type: 'bar',
data: DEFAULT_DATA.yAxisData,
}]
});
console.log("this.eventType:" + this.eventType);
myChart.on(this.eventType, function (params) {
window.open('https://www.baidu.com/s?wd=' + encodeURIComponent(params.name));
});
}else {
console.log('bar_dv为空!');
}
}
},
}
</script>
<style scoped>
</style>
到此为止该问题就算解决了
错误场景二:
当我想在el-dialog对话框中展示Echarts图表时,出现了如下错误:
问题定位:
经过反复的调试后发现,通过$refs获取不到 el-dialog对话框中的子组件对象,返回的都是undefined,这也就导致了上图的错误。
解决办法:
在通过this.$refs 获取el-dialog对话框中的子组件对象之前加入以下函数即可:
this.$nextTick(function () {
});
全部代码如下:
<template>
<el-dialog ref="dialog_root" title="节点指标" :visible="isShowDialog" @close="hideData()" width="60%">
<!--负载情况-->
<div ref="bar_dv" :style="{width:'600px',height:'400px'}">
</div>
</el-dialog>
</template>
<script>
import echarts from 'echarts'
export default {
name: "NodeIndexDialog",
props: {
isShowDialog: {
type: Boolean,
default: false,
},
},
mounted(){
console.log('mounted()');
this.$nextTick(function () {
this.drawLine();
});
},
methods:{
/*
负载情况图标
*/
drawLine(){
let bar_dv = this.$refs.bar_dv;
let myChart = echarts.init(bar_dv);
// 绘制图表
myChart.setOption({
title: { text: '在Vue中使用echarts' },
tooltip: {},
xAxis: {
data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
},
yAxis: {},
series: [{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}]
});
},
hideData() {
this.$emit("hideDialog")
},
confirm(){
this.hideData();
},
}
}
</script>
<style scoped>
</style>
问题解决!
如果el-dialog封装为一个单独的detailDialog组件,被引入到cards组件中,cards组件被引入到home组件中,home组件在被加载的时候,cards组件会被加载,同时detailDialog组件也会被加载,此时如果按照上面的写还是会报错,此时需要让detailDialog组件在被点击的时候才触发加载,并且等到节点被加载之后在绘制图表
表格的初始化在mounted的时候,通过调用this.drawLine();来实现的,但是加载charts的div不在页面节点中,所以初始化不成功。echats初始化的时候,节点一定要是在页面中真实存在的。
解决办法:
- 1.this.$nextTick(()=> { this.drawLine(); this.drawLine2(); }) 这样做能实现。
- 2.setTimeout(() => { this.drawLine(); this.drawLine2(); },10); 弄一个定时器,等页面加载完成后再执行
优选.this.$nextTick(()=> { this.drawLine(); this.drawLine2(); }) 方法
在被点击弹出弹窗之后,才进行加载,同时在本轮dom加载之后,在下一轮进行加载chart图表
export default {
name: 'detailDialog',
data () {
return {
equityBalance: this.item.equityData,
depositWithdraw: this.item.depositWithdraw,
symbol: 3,
//真实的出金记录
withdrawData: {},
//真实的入金记录
depositData: {}
};
},
props: {
views: Boolean,
item: Object,
idss: String
},
components: {},
watch: {
views: function (newVal) {
if (newVal) {
this.$nextTick(function () {
this.drawLine(this.equityBalance, this.depositWithdraw);
})
}
}
}
}
ok,问题解决
VUE中集成echarts时 getAttribute of null错误的更多相关文章
- 记录下vue 中引用echarts 出现 "TypeError: Cannot read property 'getAttribute' of undefined"问题
今天做项目,用echarts展示数据 ,自己测试 先测试 了下.写的代码html: <div ref="myChart" style="height:300px;w ...
- Vue中使用ECharts画散点图加均值线与阴影区域
[本文出自天外归云的博客园] 需求 1. Vue中使用ECharts画散点图 2. 在图中加入加均值线 3. 在图中标注出阴影区域 实现 实现这个需求,要明确两点: 1. 知道如何在vue中使用ech ...
- 在vue中使用echarts图表
在vue中使用echarts图表 转载请注明出处:https://www.cnblogs.com/wenjunwei/p/9815290.html 安装vue依赖 使用npm npm instal ...
- 在vue中调用echarts中的地图散点图~
首先!当然是在vue中引入echarts! 命令行 npm install echarts --save 在main.js文件中里引入 import echarts from 'ech ...
- vue中使用echarts(vue+vue-cli+axios+jsonp+echarts)
一.安装echarts: cnpm i echarts -D 二.在vue-cli的main.js文件中引用echarts: import charts from 'echarts' Vue.prot ...
- vue中使用echarts的两种方法
在vue中使用echarts有两种方法一.第一种方法1.通过npm获取echarts npm install echarts --save 2.在vue项目中引入echarts 在 main.js 中 ...
- 使用ueditor中的setContent() 时经常报innerHtml错误(笔记)
1)今天遇到个问题,使用ueditor中的setContent() 时经常报innerHtml错误:网上找了下解决方案:发现这个可以用: 不能创建editor之后马上使用ueditor.setCont ...
- Access 中数据库操作时提示from子句语法错误
问题:如果在Access 中数据库操作时提示from子句语法错误原因:语句中某一单词为Access中的关键字.如:select * from user.其中user就是一关键字.解决:用中括号[]将其 ...
- 在OAF页面中集成ECharts以及highcharts用于显示图表
历史博文中有讲解在请求中输出基础图表的方式,见地址:EBS 请求输出Html报表集成Echarts 本文讲述在OAF中集成这两类图表. 集成的基本思路:在OAF页面中加入一个rawText组件,在ra ...
随机推荐
- Python3-ORM-Sqlalchemy
目录: ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 orm英文全称object relational mapping, ...
- V8垃圾回收?看这篇就够了!
什么是内存管理 内存管理是控制和协调应用程序访问电脑内存的过程.这个过程是复杂的,对于我们来说,可以说相当于一个黑匣子. 当咱们的应用程序运行在某个操作系统中的时候,它访问电脑内存(RAM)来达成下列 ...
- 《即时消息技术剖析与实战》学习笔记10——IM系统如何应对高并发
一.IM 系统的高并发场景 IM 系统中,高并发多见于直播互动场景.比如直播间,在直播过程中,观众会给主播打赏.送礼.发送弹幕等,尤其是明星直播间,几十万.上百万人的规模一点也不稀奇.近期随着武汉新型 ...
- Spring注解开发系列Ⅴ --- 自动装配&Profile
自动装配: spring利用依赖注入和DI完成对IOC容器中各个组件的依赖关系赋值.自动装配的优点有: 自动装配可以大大地减少属性和构造器参数的指派. 自动装配也可以在解析对象时更新配置. 自动装配的 ...
- java.io 包下的类有哪些 + 面试题
java.io 包下的类有哪些 + 面试题 IO 介绍 IO 是 Input/Output 的缩写,它是基于流模型实现的,比如操作文件时使用输入流和输出流来写入和读取文件等. IO 分类 传统的 IO ...
- http请求中的 OPTIONS 多余请求消除,减少的案例
问题: 项目中遇到移动端发送同样的请求2次,仔细看了一下,有个是options报文. HTTP请求翻一倍,对服务器的性能有较大影响,造成nginx的无畏消耗,需要消除它. 解决思路: 1.上网查看了一 ...
- tmobst3an
1.(单选题)如果数据库是oracle,则generator属性值不可以使用(). A)native B)identity C)hilo D)sequence 解析:identity:生成long, ...
- 使用Java封装一个DBUtils类(反射)
刚开始学JavaWeb时,我是调用N个setter方法将从数据库中查询出的数据封装成JavaBean的,极其繁琐. 后来了解SpringJDBC后,发现它提供的接口非常简单,然后就想自己封装一个简单的 ...
- CCF_201604-1_折点计数
(a[i]-a[i-1])*(a[i]-a[i+1]) > 0 的点符合条件 #include<cstdio> #include<iostream> using name ...
- qt creator源码全方面分析(2-7)
目录 Completing Code 补全代码片段 编辑代码片段 添加和编辑片段 删除片段 重置片段 补全Nim代码 Completing Code 在编写代码时,Qt Creator建议使用属性,I ...