错误

[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,问题解决

最新文章

  1. openssh/ntp/ftp漏洞
  2. RouterOS 软路由配置固定IP上网+DHCP
  3. [SAP ABAP开发技术总结]内表操作
  4. partition by
  5. Python的OO思想
  6. 学习笔记_过滤器详细_2(过滤器JavaWeb三大组件之一)
  7. IOS框架概览
  8. ASIO攻破!!!----转
  9. 递归与DP
  10. PHP 获取一篇文章内容中的全部图片,并下载
  11. C++程序设计方法3:虚函数
  12. MySQL数据库的库表基本操作
  13. p3396 哈希冲突(暴力)
  14. progress 进度条
  15. Numba:高性能Python编译器
  16. PAT乙级1014
  17. Codeforces Round #298 (Div. 2) C. Polycarpus&#39; Dice 数学
  18. 神马是代码简单的cmd模式,这就是!
  19. 学习spring2--跟我一起学Spring 3(3)–使用Spring开发第一个HelloWorld应用
  20. [我的CVE][CVE-2017-15708]Apache Synapse Remote Code Execution Vulnerability

热门文章

  1. SMB信息泄露
  2. Nginx(3)---代理与负载均衡
  3. ubuntu16.04+Opencv3.4.0安装(slam版)
  4. Java使用反射实现根据字符串类名及参数创建对象
  5. 《 Java 编程思想》CH06 访问权限控制
  6. Android View的绘制机制前世今生---前世
  7. vs 搭配 Linux 开发
  8. css 纯css轮播图 示例
  9. lwip nd没有实现ra,contik有参考
  10. PBFT 算法 java实现(下)