【ECharts?】解決Vue 中 v-show 導致組件 ECharts 樣式異常問題

解決Vue 中 v-show 導致組件 ECharts 樣式異常問題

問題概述

在使用 Vue 的 v-show 指令實現 <PageOne/><PageTwo/><PageThree/> 三個視圖的定時切換時,<PageTwo/> 顯示時出現了異常,具體表現為 ECharts 圖表渲染圖表尺寸異常問題,嚴重影響了頁面的正常展示和用戶體驗。

錯誤原因

v-show 的隱藏機制通過設置 display: none 隱藏元素,雖然元素仍然保留在 DOM 中,但它不參與頁面的布局計算,因此寬高被計算為 0。當 ECharts 初始化時,它依賴容器的實際尺寸來渲染圖表。如果此時容器處于隱藏狀態,ECharts 會以 0 尺寸進行渲染,之后切換為可見時,圖表無法自動修正其尺寸,導致圖表渲染異常 。

解決方法:

🌟延遲初始化并重繪圖表

  1. 父組件傳遞顯示狀態

    在父組件中使用 currentPage 判斷,并通過 isVisible 屬性告知 <PageTwo/> 當前是否可見:

    <!-- 父組件模板 -->
    <PageTwov-show="currentPage === 2":is-visible="currentPage === 2"
    />```
    
  2. 在 PageTwo 中監聽并重繪

    PageTwo 接收 isVisible,通過 watch 監聽其變化,在可見時延遲執行圖表初始化和尺寸更新:

    <script setup>
    import { ref, watch, nextTick } from 'vue';
    import { initChart, handleWindowResize } from '@/utils/chartHelper';const props = defineProps({ isVisible: Boolean });
    const gridItems = ref([]);watch(() => props.isVisible,(visible) => {if (visible) {// 等待 DOM 完全渲染nextTick(() => {// 重新初始化每個圖表gridItems.value.forEach(item => initChart(item.id));// 觸發全局 resize,通知 ECharts 更新尺寸handleWindowResize();});}},{ immediate: true }
    );
    </script>
    

    說明:確保 initChart 方法內部調用了 echarts.init(dom) 并配置了必要的選項,handleWindowResize 則使用 window.dispatchEvent(new Event('resize'))

完整代碼

父組件

<template><div><button @click="currentPage = 1">Page One</button><button @click="currentPage = 2">Page Two</button><button @click="currentPage = 3">Page Three</button><!-- 使用 v-show 切換頁面 --><PageTwo v-show="currentPage === 2" :is-visible="currentPage === 2" /></div>
</template><script setup>
import { ref } from 'vue';
import PageTwo from './PageTwo.vue'; // 假設 PageTwo.vue 為子組件const currentPage = ref(1);
</script>

PageTwo 組件

<template><div class="page-two"><div class="chart-container" v-for="item in gridItems" :key="item.id" :id="item.id"><!-- 圖表容器 --></div></div>
</template><script setup>
import { ref, watch, nextTick } from 'vue';
import { initChart, handleWindowResize } from '@/utils/chartHelper'; // 假設這些方法已定義const props = defineProps({isVisible: {type: Boolean,default: false}
});const gridItems = ref([{ id: 'chart1' },{ id: 'chart2' }
]);// 監聽 isVisible,確保在頁面顯示時重新初始化圖表
watch(() => props.isVisible, (isVisible) => {if (isVisible) {nextTick(() => {// 重新初始化每個圖表gridItems.value.forEach(item => initChart(item.id));// 觸發窗口resize,通知 ECharts 更新尺寸handleWindowResize();});}
}, { immediate: true });
</script><style scoped>
/* 你的樣式 */
.chart-container {width: 100%;height: 400px;
}
</style>

總結

  1. 使用 v-show 切換 <PageTwo/> 時,is-visible 屬性用于控制頁面是否可見。
  2. <PageTwo/> 中監聽is-visible,當頁面顯示時,使用 nextTick 延遲執行,確保 DOM 更新后初始化圖表并調整尺寸
  3. 使用 initChart 初始化 ECharts 圖表handleWindowResize 用于觸發窗口尺寸變化,確保圖表正確渲染。

這段代碼確保在使用 v-show 顯示<PageTwo/> 時,ECharts 圖表能夠根據正確的尺寸重新初始化,解決因 v-show 隱藏導致的初始化問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916113.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916113.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916113.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

旅游管理虛擬仿真實訓室:重構實踐教學新生態

在旅游產業數字化轉型與教育信息化深度融合的背景下&#xff0c;旅游管理虛擬仿真實訓室成為連接理論教學與行業實踐的關鍵紐帶。它通過沉浸式技術還原旅游場景&#xff0c;解決傳統實訓中資源受限、風險較高、時空局限等問題&#xff0c;為旅游管理專業人才培養提供全新路徑。…

【在線五子棋對戰】十、對戰玩家匹配管理模塊

文章目錄前言Ⅰ. 匹配隊列實現Ⅱ. 匹配隊列管理類實現完整代碼前言 五子棋對戰的玩家匹配是根據自己的天梯分數進行匹配的&#xff0c;而服務器中將玩家天梯分數分為三個檔次&#xff1a; 青銅&#xff1a;天梯分數小于 2000 分白銀&#xff1a;天梯分數介于 2000~3000 分之間…

k8s之ingress定義https訪問方式

接上文&#xff1a;https://blog.csdn.net/soso678/article/details/149607069?spm1001.2014.3001.5502定義后端應用與service [rootmaster ingress]# cat my-nginx.yml apiVersion: apps/v1 kind: Deployment metadata:name: my-nginx spec:selector:matchLabels:run: my-n…

《C++ vector 完全指南:vector的模擬實現》

《C vector 完全指南&#xff1a;vector的模擬實現》 文章目錄《C vector 完全指南&#xff1a;vector的模擬實現》一、定義vector的成員變量二、用vector實現動態二維數組三、vector的接口實現1.vector的默認成員函數&#xff08;1&#xff09;構造函數實現&#xff08;2&…

騰訊云代碼助手使用指南

騰訊云代碼助手使用指南什么是騰訊云代碼助手功能區展示功能介紹功能演示一、創建新項目1.先用Chat 把口語化的需求轉換成AI更容易接受的結構化提示詞2.再用Craft 模式進行代碼生成3.成果展示二、老項目探索1.使用Codebase 幫理解項目代碼三、代碼補全1.只需輸入標準的函數名&a…

【vue3+vue-pdf-embed】實現PDF+圖片預覽

【vue3vue-pdf-embed】實現PDF圖片預覽項目背景項目代碼分析代碼項目背景 技術棧&#xff1a;vue3Tselementplus 需要實現PDF和圖片預覽 圖片預覽很好解決了&#xff0c;可以用elementplus 自帶的組件el-image 可實現 PDF預覽可以用搜了一圈&#xff0c;有兩個方案&#xff0c…

Leetcode力扣解題記錄--第21題(合并鏈表)

題目鏈接&#xff1a;21. 合并兩個有序鏈表 - 力扣&#xff08;LeetCode&#xff09; 題目描述 將兩個升序鏈表合并為一個新的 升序 鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。 示例 1&#xff1a; 輸入&#xff1a;l1 [1,2,4], l2 [1,3,4] 輸出&…

基于單片機的樓宇門禁系統的設計與實現

2、系統總體設計 2.1硬件的總體設計 為了使門禁系統智能化&#xff0c;需要一個主控芯片對整個門禁系統進行管理控制。接著還需要對應的模塊完成包括數字密碼驗證和IC卡識別驗證的功能。當出現非法闖入、驗證失敗等情況時還需要對操作人員進行警告。最后需要一個人機交互界面方…

全天候自動化數字型智能驅鳥裝置,電網防鳥高科技

鳥類在輸電線路鐵塔、電線桿上筑巢、棲息和排泄是個大問題&#xff0c;很容易引發線路故障導致停電。為了保障電網安全穩定運行&#xff0c;會用到各種智能驅鳥裝置來驅趕鳥類&#xff0c;避免涉鳥故障發生。例如全天候自動化數字型智能驅鳥裝置&#xff0c;其厲害的地方在于它…

技術、生態與商業:從PC到移動的平臺之爭

在科技發展的漫長歷史中&#xff0c;我們常常驚嘆于那些改變世界的偉大技術。然而&#xff0c;深入探究會發現&#xff0c;單純的技術領先并不能保證最終的勝利。從 PC 操作系統到移動終端&#xff0c;乃至服務器軟件&#xff0c;那些最終笑傲江湖的巨頭們都遵循著一個共同的法…

android JXL 導出Excel(.xls/xlsx)

前面使用過 POI 導出xlsx但是它體量比較大&#xff0c;功能較豐富&#xff0c;在一些對包size比較敏感并且導出需求相對簡單的項目中就不太適合。 poi鏈接&#xff1a;Android 導入導出excel xls、xlsx_android excel導入導出-CSDN博客 jxl 包體積小&#xff0c;使用簡單、AP…

mysql 的主從機制是怎么實現的?

MySQL 作為當前最流行的開源關系型數據庫之一&#xff0c;為了滿足數據的高可用、負載均衡和容災備份等需求&#xff0c;廣泛應用主從復制&#xff08;Replication&#xff09;機制。其核心思想是&#xff1a;在一臺主庫&#xff08;Master&#xff09;上發生的所有數據變更都會…

【PHP 函數從入門到精通】

&#x1f9e0; PHP 函數從入門到精通 PHP 函數是編程中最基礎、也是最強大的工具之一。它不僅可以簡化代碼、提高復用性&#xff0c;還能通過各種高級用法&#xff0c;讓你寫出更靈活、更現代的代碼。 下面我們從函數的基礎講起&#xff0c;逐步深入&#xff0c;帶你掌握函數的…

CGA老年綜合評估漢密爾頓抑郁量表與認知評估聯用

一、CGA老年綜合評估漢密爾頓抑郁量表與認知評估聯用的基礎CGA老年綜合評估 &#xff08;一&#xff09;二者評估內容的互補性 CGA老年綜合評估漢密爾頓抑郁量表主要聚焦于老年人的抑郁情緒及相關癥狀&#xff0c;而認知評估則著重考察老年人的記憶力、注意力、思維能力等認知…

教培機構如何開發自己的證件照拍照采集小程序

職業教培機構對學員的證件照采集是進行學生培訓管理、考試報名、證書發放的前置工作&#xff0c;傳統拍照和收集證件照的方式往往面臨效率低、質量參差不齊等問題。開發一款專屬的證件照拍照采集小程序&#xff0c;不僅能提升機構形象&#xff0c;還能大幅優化工作流程。借助“…

GC8872刷式直流電機驅動器詳解:3.6A驅動能力與PWM控制

概述GC8872是一款具有故障報告功能的刷式直流電機驅動芯片&#xff0c;專為打印機、電器、工業設備等機電一體化應用設計。這款芯片采用ESOP8封裝&#xff0c;集成了H橋驅動電路和多種保護功能&#xff0c;支持高達3.6A的峰值電流輸出。關鍵特性寬電壓工作范圍&#xff1a;6.5V…

從0開始學習R語言--Day54--雙重固定模型

對于具有空間差異的數據&#xff0c;如果不知道數據的特征關系或意義&#xff0c;直接用杜賓模型來處理是一個比較通用的思路&#xff0c;只是后續還需要很多檢驗去證明結果的可解釋性和統計性。但如果我們已經知道特征的意義&#xff0c;比如企業經濟發展的數據中有著員工的科…

三生篩法在計算數論中的極限是什么?

AI輔助創作&#xff1a;三生篩法在計算數論中的極限主要體現在?規模邊界?、?算法適應性?及?理論兼容性?三個維度&#xff0c;其核心瓶頸與突破路徑如下&#xff1a;一、規模邊界&#xff1a;計算效率的斷崖式衰減??低維高效區的上限?在 10^15 以內數域&#xff0c;三生…

iOS WebView 加載失敗與緩存刷新問題排查實戰指南

在移動 App 中嵌入網頁后&#xff0c;不少團隊都會遇到一個詭異的問題&#xff1a;用戶看到的是“舊內容”&#xff0c;或“資源加載失敗”&#xff0c;但在瀏覽器調試中一切正常。特別是在 iOS WebView 中&#xff0c;這類緩存和加載問題常常隱匿、難以復現。 這篇文章將通過一…

GoLand 項目從 0 到 1:第二天 —— 數據庫自動化

第二天核心任務&#xff1a;自動化與多數據庫支持第二天的開發聚焦于數據庫自動化流程構建與MongoDB 業務鏈路擴展&#xff0c;通過工具化手段解決數據庫操作的重復性問題&#xff0c;同時完善多數據庫支持能力。經過一天的開發&#xff0c;項目已實現數據庫初始化、遷移、種子…