解决element标签组件切换echarts图表宽高丢失问题

导读:本篇文章讲解 解决element标签组件切换echarts图表宽高丢失问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

问题描述

html 代码

<el-tab-pane label="标签一" name="first">
  <div class="chartBox">
    <div id="pillarsChart" :style="{ width: '100%', height: '100%' }"></div>
  </div>
</el-tab-pane>
<el-tab-pane label="标签二" name="second">
  <div class="chartBox">
    <div id="brokenChart" :style="{ width: '100%', height: '100%' }"></div>
  </div>
</el-tab-pane>

css 代码

.chartBox {
  width: 100%;
  height: 300px;
}

实现效果

在这里插入图片描述

通过上面的代码及图片我们可以看到两个图表容器绑定的是同一个 class 类名,然而当我们点击第二个标签时,样式却没有生效,这是为什么呢?


原因分析:

其实根本的原因在于标签页下的内容在初始化这个标签组件时就已经被渲染完成了,当你点击标签,图表就会变成默认的宽高;说白了就是你的渲染时机不对,再加上 echarts 是根据父级给定宽高,而在初始化页面的时候其他标签切换是都是隐藏的,是没有宽高的,所以就会出现上述的问题。


解决方案:

最简单的解决方法也是 element 官方文档的方法,在标签上加上 :lazy = "true",让其延迟渲染即可。

lazy 属性

在这里插入图片描述

实现效果

在这里插入图片描述


注意:

此方法仅适用于 echarts 图表是以子组件的方式引入的情况,如果你的图表是直接在标签组件里写的并且渲染的,是无法生效的;而且会报以下错误:

在这里插入图片描述

如果你确实需要将 echarts 图表直接放在标签组件中,可参考博主另一篇文章,解决echarts报错Cannot read properties of null (reading‘getAttribute‘)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/79360.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!