vue使用element-ui tabs切換echarts解決寬度100%方式
vue使用element-ui tabs切換echarts 解決寬度100%
問題描述
vue+element項目中使用到了tab切換選項卡,其中有一個tab下的內(nèi)容是echarts,出現(xiàn)了echarts寬度縮減為100px無法繼承100%屬性。
問題
echarts渲染時tab選項卡display為none,所以width:100%沒有可繼承項,被echarts自帶方法切割成100px。
解決思路
銷毀組件,在tab選項卡被選中時重新渲染組件,這個時候就會有寬度繼承。
第一種:通過 v-if 重新渲染組件即可。
<template> ? <div> ? ? <el-tabs v-model="activeName" @tab-click="handleClick"> ? ? ? ? <el-tab-pane label="學生實習統(tǒng)計" name="1"> ? ? ? ? ? ? <xiaobear-bar-chart ref="child" v-if="activeName==='1'"/> ? ? ? ? </el-tab-pane> ? ? ? ? <el-tab-pane label="學生周記統(tǒng)計" name="2"> ? ? ? ? ? ? <xiaobear-pie-chart ref="second" v-if="activeName==='2'"/> ? ? ? ? </el-tab-pane> ? ? </el-tabs> ? </div> </template>
<script> ? export default { ? ? name: "IncomeStatistics", ? ? data() { ? ? ? return { ? ? ? ? activeName: '1', //當前激活的標簽頁 ? ? ? }; ? ? }, ? ? methods: { ? ? ? //切換標簽頁時觸發(fā) ? ? ? handleClick(tab, event) { ? ? ? ? this.activeName = tab.name; ? ? ? }, ? ? } ? } </script>?
第二種:延時調(diào)用echart的resize()方法即可
methods:{ ? ? handleClick(tab, event) { ? ? ? if (tab.name === 'second') { ? ? ? ? this.$nextTick(() => { ? ? ? ? ? this.$refs.second.chart.resize() ? ? ? ? }) ? ? ? } ? ? }, }
第三種:給標簽添加lazy屬性
<el-tab-pane :laze="true"> ? ? <ToexamineLine ref="child"/> </el-tab-pane>
vue el-tabs切換 不顯示echarts 寬度為0
1.通過echarts不同的id,寫不同的圖,調(diào)用接口展示不同的圖
<el-tabs v-model="activeName" @tab-click="handleClick"> ? ? <el-tab-pane label="電廠" name="dc" > ? ? ? ? <div :id="'myChart1'" style="width:100%;height:160%;"></div> ? ? </el-tab-pane> ? ? <el-tab-pane label="變電站" name="bdz" > ? ? ? ? <div :id="'myChart2'" style="width:100%;height:160%;"></div> ? ? </el-tab-pane> </el-tabs>
methods: { initChart1() { ? ? ? ? this.chart1 = echarts.init(document.getElementById("myChart1")); ? ? ? ? var option = { ? ? ? ? ? //內(nèi)容省略 ? ? ? ? }; ? ? ? ? this.gsList = []; ? ? ? ? this.dsList = []; ? ? ? ? this.chart1.setOption(option, true) ? ? ? }, ? ? ? initChart2() { ? ? ? ? this.chart2 = echarts.init(document.getElementById("myChart2")); ? ? ? ? var option = { ? ? ? ? ? //內(nèi)容省略 ? ? ? ? }; ? ? ? ? this.gsList = []; ? ? ? ? this.dsList = []; ? ? ? ? this.chart2.setOption(option, true) ? ? ? }, ? ? //標簽頁 ? ? ? handleClick(tab, event) { ? ? ? ? this.activeName == tab.name; ? ? ? ? if(this.activeName == 'dc'){ ? ? ? ? ? this.queryForm.type = 'dc' ? ? ? ? ? this.getList() ? ? ? ? }else if(this.activeName == 'bdz'){ ? ? ? ? ? this.queryForm.type = 'bdz' ? ? ? ? ? this.getList() ? ? ? ? } ? ? ? }, ? ? ?getList(){ ? ? ? ? //圖 ? ? ? ? if(this.activeName == 'dc'){ ? ? ? ? ? getDwgs(this.queryForm).then((res) => { ? ? ? ? ? ? this.echartsList = res.list ? ? ? ? ? ? for(let i=0;this.echartsList.length>i;i++){ ? ? ? ? ? ? ? this.dsList.push(this.echartsList[i].ds) ? ? ? ? ? ? ? this.gsList.push(this.echartsList[i].gs) ? ? ? ? ? ? } ? ? ? ? ? ? this.$nextTick(() => { ? ? ? ? ? ? ? this.initChart1() ? ? ? ? ? ? }) ? ? ? ? ? }) ? ? ? ? }else if(this.activeName == 'bdz'){ ? ? ? ? ? getDwgs(this.queryForm).then((res) => { ? ? ? ? ? ? this.echartsList = res.list ? ? ? ? ? ? for(let i=0;this.echartsList.length>i;i++){ ? ? ? ? ? ? ? this.dsList.push(this.echartsList[i].ds) ? ? ? ? ? ? ? this.gsList.push(this.echartsList[i].gs) ? ? ? ? ? ? } ? ? ? ? ? ? this.$nextTick(() => { ? ? ? ? ? ? ? this.initChart2() ? ? ? ? ? ? }) ? ? ? ? ? }) ? ? ? ? } ? ? ? }, }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Element-ui table中過濾條件變更表格內(nèi)容的方法
下面小編就為大家分享一篇Element-ui table中過濾條件變更表格內(nèi)容的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03VeeValidate在vue項目里表單校驗應(yīng)用案例
這篇文章主要介紹了VeeValidate在vue項目里表單校驗應(yīng)用案例,VeeValidate是Vue.js的驗證庫,它有很多驗證規(guī)則,并支持自定義規(guī)則,非常具有實用價值,需要的朋友可以參考下2018-05-05Vue3實戰(zhàn)學習配置使用vue?router路由步驟示例
這篇文章主要為大家介紹了Vue3實戰(zhàn)學習配置使用vue?router路由步驟示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06vue項目本地開發(fā)完成后部署到服務(wù)器后報404錯誤解決方案
很多時候我們發(fā)現(xiàn)辛辛苦苦寫的VueJs應(yīng)用經(jīng)過打包后在自己本地搭建的服務(wù)器上測試沒有什么問題,但真正放在服務(wù)器上后會發(fā)現(xiàn)或多或少的問題,這篇文章主要給大家介紹了關(guān)于vue項目本地開發(fā)完成后部署到服務(wù)器后報404錯誤的解決方案,需要的朋友可以參考下2024-01-01