vue tab切換,解決echartst圖表寬度只有100px的問題
解決思路:直接將圖表的寬高寫死,根據(jù)實(shí)際代碼進(jìn)行改寫,提供一個(gè)思路
1.將圖表放進(jìn)一個(gè)div里面
<div class="echarts">
<div id="myChart" :style="{width: '100%', height: '150px'}"></div>
</div>
2.定義一個(gè)方法,并在mounted視圖更新的時(shí)候執(zhí)行
<script>
export default {
mounted() {
this.setMyChart();
},
methods: {
setMyChart() {
// jq寫法
// 獲取父元素
var echarts = $('.echarts');
// 獲取父元素寬高
var echartsWidth = echarts.outerWidth(true);
var echartsHeight = echarts.outerHeight(true);
// 獲取圖表元素
var myChart = $('#myChart');
// 將父元素寬高賦值給圖表
myChart.css('width', myChart);
myChart.css('height', myChart);
// 原生js寫法
// 獲取父元素
// var echarts = document.querySelector('.echarts');
// 獲取父元素寬高
// var echartsWidth = getStyle(echarts,'width');
// var echartsHeight = getStyle(echarts,'height');
// 獲取圖表元素
// var myChart = document.querySelector('#myChart');
// 將父元素寬高賦值給圖表
// myChart.style.width = echartsWidth;
// myChart.style.height = echartsHeight;
// 這是一個(gè)封裝好的方法,兼容IE,第一個(gè)參數(shù),element, 第二個(gè)屬性,css樣式
// function getStyle(obj, attr) {
// if (obj.currentStyle) {
// return obj.currentStyle[attr];
// } else {
// return document.defaultView.getComputedStyle(obj,null)[attr];
// }
// }
}
}
};
</script>
3.樣式
<style scoped>
.echarts {
width:300px;
height:150px;
}
</style>
如果本篇文章對你有幫助的話,很高興能夠幫助上你。
補(bǔ)充知識:vue項(xiàng)目tab切換echart圖表切換寬度縮小和圖表內(nèi)容不正確解決
代碼:
布局:
<TabButton :btnValue1="'總數(shù)'" :btnValue2="'明細(xì)'" @watchFlag="handler"></TabButton> <div class="it_content"> <div class="picture" id="work" ref="work" v-show="flag===false"></div> <div class="picture" id="workTotal" ref="workTotal" v-show="flag===true"></div> </div>
處理函數(shù):
handler(flag){
this.flag=flag;
if(!this.flag){
this.$nextTick(() => {
this.drawwork(); // 明細(xì)圖
});
}else{
this.$nextTick(() => {
this.drawworkTotal(); // 總數(shù)圖
});
}
},
1、解決寬度縮小的問題
本來是用vue指令的v-if,但是發(fā)現(xiàn)用v-if出現(xiàn)寬度縮小的問題。后來改用v-show。這是因?yàn)関-if指令是將Dom元素去除掉位置空間了,v-show是將Dom元素位置空間保留了,但并沒有進(jìn)行渲染。v-show保留所定義的樣式,空間位置也被保留,echarts圖表的寬高依舊和之前一樣,所以不會縮小。
2、圖表內(nèi)容不正確
利用this.$nextTick(() => {})。Vue 實(shí)現(xiàn)響應(yīng)式并不是數(shù)據(jù)發(fā)生變化之后 DOM 立即變化,而是按一定的策略進(jìn)行 DOM 的更新。 $nextTick 是在下次 DOM 更新循環(huán)結(jié)束之后執(zhí)行延遲回調(diào),在修改數(shù)據(jù)之后使用 $nextTick,則可以在回調(diào)中獲取更新后的 DOM。flag發(fā)生變化之后,Dom沒有立即更新了,通過 $nextTick 回調(diào)函數(shù),執(zhí)行echarts的繪畫。
nextTick的由來:
由于VUE的數(shù)據(jù)驅(qū)動視圖更新,是異步的,即修改數(shù)據(jù)的當(dāng)下,視圖不會立刻更新,而是等同一事件循環(huán)中的所有數(shù)據(jù)變化完成之后,再統(tǒng)一進(jìn)行視圖更新。
nextTick的觸發(fā)時(shí)機(jī):
在同一事件循環(huán)中的數(shù)據(jù)變化后,DOM完成更新,立即執(zhí)行nextTick(callback)內(nèi)的回調(diào)。
結(jié)合nextTick的由來,可以推出每個(gè)事件循環(huán)中,nextTick觸發(fā)的時(shí)機(jī):
同一事件循環(huán)中的代碼執(zhí)行完畢 -> DOM 更新 -> nextTick callback觸發(fā)
應(yīng)用場景:
需要在視圖更新之后,基于新的視圖進(jìn)行操作。
以上這篇vue tab切換,解決echartst圖表寬度只有100px的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
手把手教你如何創(chuàng)建一個(gè)VUE項(xiàng)目(超簡單)
這篇文章主要給大家介紹了關(guān)于如何創(chuàng)建一個(gè)VUE項(xiàng)目的相關(guān)資料,創(chuàng)建vue項(xiàng)目有很多種方式,這里給大家介紹一種非常簡單的方法,需要的朋友可以參考下2023-08-08
Vuerouter的beforeEach與afterEach鉤子函數(shù)的區(qū)別
本文詳細(xì)的介紹了Vuerouter的beforeEach與afterEach鉤子函數(shù)的區(qū)別和使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
vue2.0 + element UI 中 el-table 數(shù)據(jù)導(dǎo)出Excel的方法
下面小編就為大家分享一篇vue2.0 + element UI 中 el-table 數(shù)據(jù)導(dǎo)出Excel的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
Vue.js 2.0學(xué)習(xí)教程之從基礎(chǔ)到組件詳解
這篇文章主要介紹了Vue.js 2.0從基礎(chǔ)到組件的相關(guān)資料,文中介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue.js具有一定的參考價(jià)值,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。2017-04-04
前端vue?uni-app?cc-countdown倒計(jì)時(shí)組件使用詳解
cc-countdown是一個(gè)倒計(jì)時(shí)組件,它可以顯示剩余時(shí)間、天數(shù)、小時(shí)數(shù)、分鐘數(shù)和秒數(shù),在本文中,我們將介紹如何在uni-app中使用cc-countdown組件,需要的朋友可以參考下2023-08-08
elementui 開始結(jié)束時(shí)間可以選擇同一天不同時(shí)間段的實(shí)現(xiàn)代碼
這篇文章主要介紹了elementui 開始結(jié)束時(shí)間可以選擇同一天不同時(shí)間段的實(shí)現(xiàn)代碼,需要先在main.js中導(dǎo)入相應(yīng)代碼,代碼簡單易懂,需要的朋友可以參考下2024-02-02
vue頁面引入three.js實(shí)現(xiàn)3d動畫場景操作
這篇文章主要介紹了vue頁面引入three.js實(shí)現(xiàn)3d動畫場景操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08

