elementUI tabs切换 echarts宽度挤压到一起 由100%变成100px

这篇具有很好参考价值的文章主要介绍了elementUI tabs切换 echarts宽度挤压到一起 由100%变成100px。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

被压缩的图表:
elementUI tabs切换 echarts宽度挤压到一起 由100%变成100px
正常显示
elementUI tabs切换 echarts宽度挤压到一起 由100%变成100px

           <template>
            <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
              <el-tab-pane name="first">
                <span slot="label"><i class="el-icon-date"></i> 未达成明细</span>
                <el-col :span="24">
                <span v-if="selectType===1">
                  @include('temp.report.paper_detail')
                </span>
                  <span v-else>
                  @include('temp.report.sample_detail')
                </span>
                </el-col>
              </el-tab-pane>
              <el-tab-pane name="second">
                <span slot="label"><i class="el-icon-pie-chart"></i> 原因分析</span>
                {{--责任部门--}}
{{--                <div class="col-md-12">--}}
{{--                  <div id="mychart4" class="col-md-4" style="height: 400px">--}}
{{--                  </div>--}}
{{--                </div>--}}

                <el-row :span="24">
                  {{--业务部门--}}
                  <el-col :span="8">
                    <div id="mychart4" :style="{width: '100%', height: '400px'}">
                    </div>
                  </el-col>    
                  
               </el-row>                            
              </el-tab-pane>

            </el-tabs>

            </template>                
      handleClick(tab){
        var that = this;
        if (that.activeName == 'second') {
          //this.$nextTick() 解决图表被压缩
          this.$nextTick(function() {
            for (let i = 1; i < 10; i++) {
              that.drawPieChart_cause(i);
            }
          })
        }

      },
     drawPieChart_cause(flag){
     //画图表
     },
      <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
          <el-tab-pane name="first">

          </el-tab-pane>
          <el-tab-pane name="second" label="未达成原因分析">
            <div class="col-md-12">
              <div id="mychart1" class="col-sm-4" style="height: 400px">
              </div>

            </div>
          </el-tab-pane>
       </el-tabs>

1.需求:点击tab切换echarts

2.所用技术:引的vue.js elementUI 切换用的是elementUI中的Tabs标签页
3.遇到了几个问题:

1》报错:[Vue warn]: Error in mounted hook: “TypeError: Cannot read property ‘getAttribute’ of null”

2》点击切换 tabs,导致echarts宽挤到一起,只有100px

3》点击切换tabs,改变(放大或缩小)页面大小,再切换tabs,导致echarts的宽挤到一起 只有100px,再改变页面大小,echarts图表恢复正常。
  
echarts绘制图表计算宽度的时候,由于第二个tab的属性display: none; 所以无法获取到clientWidth,而 parseInt(stl.width, 10)) 将width: 100%;转为100,所以计算出的图表宽度为100px。

6.网上查了好多资料解决办法:

6-1:第一个报错的问题是:
elementUI tabs切换 echarts宽度挤压到一起 由100%变成100px
出现该错误的原因是:Echarts的图形容器还未生成就对其进行了初始化所造成的 解决方法如下:

//echarts容器 添加ref<div id="bar_dv" ref="chart"> 
// 基于准备好的dom 初始化echarts实例,(把第一行代码修改成第二行) 
var bar_dv = document.getElementById('bar_dv'); 
var bar_dv = this.$refs.chart; 
let myChart = this.$echarts.init(bar_dv):

6-2:

1> 通过elementui 自带的 lazy/:lazy=true (本项目添加后无效)

<el-tab-pane label="用户" name="user" lazy>用户</el-tab-pane>

2> 通过添加 mychart.resize() 重置容器大小(本项目添加后无效)

let _this = this;
window.addEventListener("resize", function () {
    _this.siteLine.resize();
}); 

3> 通过添加 setTimeout (本项目添加后无效)

setTimeout(() => {
  let weekVisitData = this.$echarts.init(this.$refs.weekVisit);
  weekVisitData.setOption(this.opt)
},0)

4> js中通过父元素的宽度预先给容器赋宽度,在window的resize里先修改dom的width 然后再调用echart的resize

$("#chartMain").css('width',$("#TabContent").width());

经过修改发现可以自适应,但是resize这个方法和获取div宽度的方法不能一起使用,导致隐藏的div还是没有宽度。浏览器缩小再放大 隐藏的div就无法自适应了。

又出现了新的问题,尴尬···

5> 通过v-if控制 (修改后可凑合解决)

参考网上其他的解决方案,自己又做了下修改 添加了点东西,解决方法如下:

(这边不清楚的需要看下elementUI文档 --Tabs标签页理解)
elementUI tabs切换 echarts宽度挤压到一起 由100%变成100px

<el-tabs v-model="activeName" @tab-click="handleClick">
    <el-tab-pane label="用户管理" name="first">
      // echarts图表标签
    <div v-if='activeName === "first"'>   
      <div id='echartsDemo'></div>
    </div>
   </el-tab-pane>
    <el-tab-pane label="配置管理" name="second">
    <div v-if='activeName === "second"'> 
      <div id='echartsDemo'></div>
    </div>
  </el-tab-pane>
 
  <el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane>
</el-tabs>
data:activeName:'first',
 mounted() { //如果默认显示第一页,要记得初始化第一页echarts的方法

     this.$nextTick(function() {
         this.echartsLine()
    })
  },

js methods{}:
handleClick(tab, event) {
       if(tab.index == 1){
             this.$nextTick(function() {
                  this.echartsMap()//通过axios拿到的后台数据填充的echarts图表方法
             })
         }else{
             this.$nextTick(function() {                                            
                  this.echartsLine()   
             })
         }
      },

如果按网上其他答案,只做v-if判断,不走js点击方法的话,项目点击切换后就会报错:(这个我没注意查看是什么原因导致的)

echarts.min.js:22 Uncaught (in promise) TypeError: Cannot read property 'getAttribute' of undefined
    at echarts.min.js:22
    at Kd (echarts.min.js:22)
    at Object.t.init (echarts.min.js:22)
    at Object.s.a.init (echarts-gl.min.js:1)
    at main.html:540

7.现在就可以解决我上面的写的后两个问题了,当然还得根据自己的项目情况找到最适合的方法

8.也有其他文章写到的解决方法,如果适合也可以参考一下

elementUI tabs切换 echarts宽度挤压到一起 由100%变成100px
elementUI tabs切换 echarts宽度挤压到一起 由100%变成100px文章来源地址https://www.toymoban.com/news/detail-441510.html

到了这里,关于elementUI tabs切换 echarts宽度挤压到一起 由100%变成100px的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElementUI tabs标签页样式改造美化

    大家如果有需要可以拿来修改使用,下面我也简单的贴上代码,代码没有注释,很抱歉,时间比较匆忙。 ## CSS:

    2024年02月15日
    浏览(77)
  • 实现ElementUI tab标签可拖拽

    通过sortablejs实现 参考:https://blog.csdn.net/wangjiecsdn/article/details/121995534

    2024年01月22日
    浏览(68)
  • elementUI如何给el-tabs/el-tab-pane添加图标

    原始的el-tabs 添加图标后的样式 ps:红色是因为添加了额外的css 在此不做描述 html部分的代码 给 el-tabs 添加 stretch 属性,使得tabs平铺满整个页面; 通过 v-if 控制选中时图标的颜色更改(其实就是换个图标); style部分的代码 由于用的是自定义的图标,所以需要在background中引

    2024年02月13日
    浏览(42)
  • tab点击切换不使用判断条件进行不同tab的切换刷新

    注:我这里使用的antd vue ui

    2024年02月09日
    浏览(42)
  • elementui的el-tabs标签页样式修改

    1.去掉下划线 效果:   代码: 2.改变下划线颜色 效果:    代码: 3.改变选中文字/鼠标滑过时文字颜色 效果:  代码: 4.设置未选中时文字颜色 效果:   代码:

    2024年02月11日
    浏览(35)
  • 使用Echarts饼图时将图例图标变成圆形

    在echarts官方实例里,图例都是方形,今天碰到需求,需要是圆形图标,在此记录一下 直接在legend中设置 icon:‘circle’

    2024年02月16日
    浏览(39)
  • uniapp 左右滑动切换页面并切换tab

    实现效果如图 要实现底部内部的左右滑动切换带动上方tab栏的切换,并且下方内容要实现纵向滚动 ,所以需要swiper,swiper-item,scroll-view组合使用 tab栏部分  tab栏点击切换,需要重新调取数据 下方内容部分 滑动切换,改变上方tab栏状态,并重新调取数据 以上即可实现页面左

    2024年02月13日
    浏览(44)
  • uview 中u-tabs如何做tab切换?

    先看案例如图所示 话不多说上代码:        

    2024年02月13日
    浏览(35)
  • uni——tab切换

    2024年02月13日
    浏览(39)
  • tab切换改进版

    2023年04月19日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包