解决el-tab使用echarts宽度自适应问题

ps:实例使用技术为vue3+ts

1. echarts设置了width: 100%但是显示的只有100px,原因是:切换tab之前tab的样式为display: none所以echarts的父元素宽度为0

2. 故而想到在切换tab的时候设置点击事件,并在获取到tab的宽度之后重新渲染echart

<!--注意设置chart外层,此处即为el-tabs和el-tab-pane的宽高-->

<el-tabs v-model="activeTab" @tab-click="handleTabClick">
    <el-tab-pane name="1" label="tab1">
        <div
            ref="chartRef"
            :style="{width: '100%', height: '200px'}"
        ></div>
    </el-tab-pane>
</el-tabs>
//注意要全局注册echarts
import {getCurrentInstance, onBeforeUnmount, onMounted, reactive, ref} from 'vue'
import type { ECharts } from "echarts";

const { proxy } = getCurrentInstance() as any
const echarts = proxy.$echarts;
const chartRef = ref(null)
let echart: ECharts
const echartOption = reactive({
    data: {/* 此处为echarts的option数据 */}
})

onMounted(() => {
  initOption()
  window.addEventListener('resize', resizeHandler)
});

const resizeHandler = () => {
  if (echart) {
    echart.resize()
  }
}

//卸载页面,销毁window.onresize事件
onBeforeUnmount(() => {
  window.onresize = null
})

const initOption = () => {
   echart = echarts.init(chartRef.value)
   echart.setOption(echartOption.data)
}

const handleTabClick = (tab: any) => {
  if (tab.props.name === '1') {
    let time = setTimeout(() => {
      resizeHandler()
      clearTimeout(time)
    }, 200)
  }
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值