1 问题描述

环境:

  • Chrome 87
  • Element-Plus
  • Vue3.0.5
  • <el-tab>+<el-tab-pane>中使用Echarts

警告如下:

2 代码

<el-tabs type="border-card">
<el-tab-pane label="xxx">
<div id="main" style="width: 500px;height: 500px;">
</div>
</el-tab-pane>
</el-tabs>
export default {
mounted() {
var category = echarts.init(document.getElementById('main'))
//...
}
}

3 原因分析

原因是<el-tab-pane>,具体可以查看这里issue

Echarts警告的关键是clientWidthclienHeight,直接在代码中固定高宽时:

<div id="main" style="width: 500px;height: 500px;"></div>

控制台打印为clientHeight/clientWidth

console.log(document.getElementById('main').clientWidth)
console.log(document.getElementById('main').clientHeight)

两者均为0,原因在于<el-tab-pane>,将图表放到外面时并没有警告:

<el-tabs type="border-card">
<div id="main" style="width: 500px;height: 500px;">
</div>
<el-tab-pane label="xxx">
</el-tab-pane>
</el-tabs>

初始化Echarts时,<el-tab-pane>并没有让Echarts获取正确的clientHeight以及clientWidth,尝试过的解决方法是监听tab-click

<el-tabs type="border-card" @tab-click="xxx">
<el-tab-pane label="xxx">
<div id="main" style="width: 500px;height: 500px;">
</div>
</el-tab-pane>
</el-tabs>

但是这需要手动点击tab才能监听到,也就是如果设置了默认tab这是无法监听到的。

另一个尝试过的方案是手动设置width/height

<el-tabs type="border-card">
<el-tab-pane label="xxx">
<div id="main" ref="main" style="width: 500px;height: 500px;">
</div>
</el-tab-pane>
</el-tabs>
mounted(){
this.$refs.main.style.width=500
this.$refs.main.style.height=500
var chart = echarts.init(document.getElementById('main'))
}

也是不行。

4 解决方案

使用Object.defineProperty设置clientWidth/clientHeight

mounted(){
Object.defineProperty(document.getElementById('main'),'clientWidth',{get:function(){return 500;}})
Object.defineProperty(document.getElementById('main'),'clientHeight',{get:function(){return 500;}})
var chart = echarts.init(document.getElementById('main'))
}

同时也可以把div上的style去掉:

<div id="main"></div>

这样就不会出现警告了。

解决Echarts+<el-tab-pane>的警告:Can't get DOM width or height的更多相关文章

  1. echarts报错Can't get dom width or height

    echarts图无法显示 一直报错Can't get dom width or height 原因:显示echarts图的div要设置宽高 报错前: <div class="left_ ...

  2. 切换不同的echarts时,出现图标缩小,报警告,Can’t get dom width or height!

    出现这样的原因是因为,在切换的时候,图表所对应的标签还没有显示出来,最好将代码放在$nextick里面执行,并且,采用使用v-if进行切换 转载:https://www.pianshen.com/ar ...

  3. echarts切换tab时,第一个图表显示,第二个图表不显示的解决办法

    首先这种情况,我在网上看到了好多人问,确实也有正解,但是只是说出了其错误出现的原因,并没有给出解决方法. 我也是深受其害,所以呢,在这里记录一下,分享给还在困扰着的你们,迅速找出解决办法. 首先,我先 ...

  4. 解决echarts的叠堆折线图数据出现坐标和值对不上的问题

    原文:https://blog.csdn.net/qq_36538012/article/details/88889545 ------------------------------- 说一个小bu ...

  5. 【JavaWeb+Echarts+EL表达式】用图表形式展示数据

    1. Echarts环境配置 https://www.echartsjs.com/zh/download.html 选择需要的,然后等待Build完成之后,就会自动弹出下载框啦! 把下载好的js放在w ...

  6. 关于解决numpy使用sklearn时的警告问题

    关于解决numpy使用sklearn时的警告问题 在使用的时候,出现提示 :219: RuntimeWarning: numpy.ufunc size changed, may indicate bi ...

  7. 解决easyui-tab添加tab滚动条问题

    //添加tab var addTab = function (title, url, icon) { if (!$('#mainTab').tabs('exists', title)) { $('#m ...

  8. 解决Twitter Bootstrap Tab URL链接问题

    例如这样的一个Tabs 代码: <ul class="nav nav-tabs" id="myTab"> <li class="ac ...

  9. 解决Chrome浏览器自动记录用户名和密码的黄色背景问题和该解决方法与tab切换至下一个input冲突的问题。

    哈哈哈,是不是标题很长呀,不逗你们了.其实这么长的标题主要就说了两件事: 第一件:解决Chrome浏览器自动记录用户名和密码的黄色背景问题. 第二件:输入完用户名后按下tab键切换至下一个输入密码in ...

随机推荐

  1. C++算法代码——求数列[coci2014/2015 contest #1]

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1815 题目描述 Mirko在数学课上以一种有趣的方式操作数列,首先,他写下一个数列A ...

  2. postman功能介绍

  3. 【OI向】快速傅里叶变换(Fast Fourier Transform)

    [OI向]快速傅里叶变换(Fast Fourier Transform) FFT的作用 ​ 在学习一项算法之前,我们总该关心这个算法究竟是为了干什么. ​ (以下应用只针对OI) ​ 一句话:求多项式 ...

  4. Go 去找个对象吧

    前言 我的读者中应该大部分都是 Java 从业者,不知道写 Java 这些年是否真的有找到对象? 没找到也没关系,总不能在一棵树上吊死,我们也可以来 Go 这边看看,说不定会有新发现. 开个玩笑,本文 ...

  5. nacos服务注册之服务器端Raft

    Raft是持久化,数据存储在\nacos\data\naming\data目录 nacos启动后首先从数据存储目录加载数据 Raft协议中节点只有一个LEADER,只有LEADER节点负责数据写入,F ...

  6. Java(JDK/Tomcat/Maven)运行环境配置及工具(idea/eclipse)安装

    Java (计算机编程语言) Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. Java语 ...

  7. Kubernetes-7.Ingress

    docker version:20.10.2 kubernetes version:1.20.1 本文概述Kubernetes Ingress基本原理和官方维护的Nginx-Ingress的基本安装使 ...

  8. QuickBase64 - Android 下拉通知栏快捷base64加解密工具

    Android Quick Setting Tile Base64 Encode/Decode Tool Android 下拉通知栏快捷 base64 加解密,自动将剪切板的内容进行 base64 E ...

  9. 剑指 Offer 64. 求1+2+…+n + 递归

    剑指 Offer 64. 求1+2+-+n Offer_64 题目描述 题解分析 使用&&逻辑短路规则来终止循环 package com.walegarrett.offer; /** ...

  10. 【Android笔记】Thread类中关于join()方法的源码分析

    1.join()方法的作用: 例如有一个线程对象为Thread1,在main()方法中调用Thread1.join()方法可使得当前线程(即主线程)阻塞,而执行Thread1线程. 2.源码分析(以上 ...