【Vue PDF】Vue PDF 組件初始不加載 pdfUrl 問題分析與修復

Vue PDF 組件初始不加載 pdfUrl 問題分析與修復

問題現象

在開發 PDF 預覽組件時,遇到這樣一個問題:

  • 初始狀態下,PDF 組件不會請求 pdfUrl(即不會加載 PDF 文件)。
  • 只有點擊"全屏"按鈕后,才會請求 pdfUrl 并渲染 PDF。
  • 退出全屏后,PDF 也能正常顯示。
  • 但如果不點擊全屏,PDF 一直無法加載。

現象復現

  1. 打開頁面,傳入 pdfUrl,PDF 區域顯示 loading,但實際沒有發起 pdfUrl 請求。
  2. 點擊全屏按鈕,PDF 能正常加載。
  3. 退出全屏后,非全屏下也能正常顯示 PDF。

代碼結構簡析

組件核心代碼片段如下:

<!-- 非全屏 PDF 渲染 -->
<div v-if="isPdfLoading" class="loading-container">...</div>
<div v-else class="pdf-content" ref="pdfContainer"><VuePdfEmbed ... />
</div><!-- 全屏 PDF 渲染 -->
<VuePdfEmbed v-if="isFullscreen" ... />
  • 非全屏時,只有 isPdfLoading 為 false,<VuePdfEmbed ... /> 才會渲染。
  • 全屏時,<VuePdfEmbed v-if="isFullscreen" ... /> 直接渲染。

問題根源

  • 組件通過監聽 pdfUrl 變化,將 isPdfLoading 設為 true。
  • 但此時 <VuePdfEmbed ... /> 沒有渲染到 DOM,自然不會發起 pdfUrl 請求。
  • 只有在全屏時,<VuePdfEmbed ... /> 被掛載,才會請求 pdfUrl。
  • 一旦 PDF 加載成功,isPdfLoading 變為 false,非全屏下的 <VuePdfEmbed ... /> 才能渲染。

本質原因: loading 狀態用 v-if/v-else 隱藏了 PDF 組件,導致其無法掛載和發起請求。

修復方案

讓 PDF 組件始終掛載,只用 loading 遮罩覆蓋 UI,不用 v-if/v-else 隱藏 PDF 組件。

修復后代碼:

<div class="pdf-content" ref="pdfContainer"><VuePdfEmbed ... /><div v-if="isPdfLoading" class="loading-container" style="..."><v-progress-circular ... /><p>{{ loadingText }}</p></div>
</div>

這樣 <VuePdfEmbed ... /> 始終在 DOM 中,pdfUrl 變化時能立即發起請求,loading 只是遮罩。

經驗教訓

  • loading 狀態建議用遮罩而不是 v-if/v-else 隱藏內容組件,避免副作用。
  • 組件的掛載時機直接影響其副作用(如發起請求、生命周期鉤子等)。
  • 復雜交互下,建議用顯式的 UI 層覆蓋而不是條件渲染。

總結

本次問題的根源在于 loading 狀態的處理方式。通過調整渲染邏輯,讓 PDF 組件始終掛載,成功解決了 PDF 組件初始不加載 pdfUrl 的問題。希望本次經驗能為類似場景提供參考。

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

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

相關文章

《注解的江湖:一場元數據的“宮斗劇”》

一、你真的懂注解嗎 你是否使用過Autowired卻不知道是如何生效的&#xff1f; 這幾個注解你一定很熟悉&#xff1a; OverrideDeprecatedTransactional 那么你有進一步思考過怎么生效的嗎&#xff1f;注解到底是什么&#xff1f;注解&#xff0c;到底是信息&#xff1f;還是指…

智能土木通 - 土木工程專業知識問答系統02-RAG檢索模塊搭建

一、項目目錄 civil_qa_system/ ├── docs/ # 項目文檔 ├── config/ # 配置文件 ├── core/ # 核心功能代碼 ├── knowledge_base/ # 知識庫相關 ├── web/ # Web應用部分 ├…

進程和線程區別、管道和套接字、共享變量、TCP三次握手,是否可以少一次握手、子進程和主進程區別和API——Nodejs

首先講了進程和線程區別 然后講解 管道和套接字&#xff0c;它是進程間通信的方式 接著講解共享變量 &#xff0c;它是線程間通信 最后講解TCP三次握手&#xff0c;因為套接字使用了TCP協議 一、線程和進程的區別 線程&#xff08;Thread&#xff09;和進程&#xff08;Pr…

docker(學習筆記第一課) 使用nginx +https + wordpress

文章目錄 docker(學習筆記第一課) 使用nginx https wordpress學習內容&#xff1a;1. 整體架構1.1 在aws ec2的整體架構1.2 不懂都可以問AI 2. 構建詳細2.1 構建ec22.2 安裝docker2.3 創建一個docker的內部network2.4 創建wordpress使用的mysql數據庫2.5 創建兩個wordpress的d…

Leetcode 刷題記錄 15 —— 二分查找

本系列為筆者的 Leetcode 刷題記錄&#xff0c;順序為 Hot 100 題官方順序&#xff0c;根據標簽命名&#xff0c;記錄筆者總結的做題思路&#xff0c;附部分代碼解釋和疑問解答&#xff0c;01~07為C語言&#xff0c;08及以后為Java語言。 01 搜索插入位置 class Solution {pub…

C++核心編程(動態類型轉換,STL,Lanmda)

一. 類型轉換 二. STL 1. 容器 1.1 Vector&#xff08;常用&#xff09; 1.1.1 概述 特性&#xff1a; 動態數組&#xff1a; 想象成一個會自動變長變短的數組。起始在內存中是連續存儲的。 隨機訪問&#xff1a; 通過[]運算符或at()方法&#xff0c;可以瞬間&#xff08;…

【圖像處理入門】8. 數學基礎與優化:線性代數、概率與算法調優實戰

摘要 圖像處理的核心離不開數學工具的支撐。本文將深入解析線性代數、概率論在圖像領域的應用,包括矩陣變換與圖像幾何操作的關系、噪聲模型的數學描述,以及遺傳算法、粒子群優化等智能算法在參數調優中的實踐。通過理論結合代碼案例,幫助讀者掌握從數學原理到工程優化的完…

操作系統八股文

一.進程和線程的區別 1.本質區別和所屬關系是什么&#xff1f; 進程是資源調度以及分配的基本單位。 線程是CPU調度的基本單位。 一個線程屬于一個進程&#xff0c;一個進程可以擁有多個線程。 2.地址空間和內存 進程擁有獨立的虛擬地址空間。 線程沒有獨立的地址空間&#xf…

【uniapp】小程序中input輸入框的placeholder-class不生效

解決方法 1.去掉scoped <style></style> 2.額外寫一組style </style lang"scss" scoped> </style> <style> ::v-deep .textarea-placeholder { font-size: 24rpx; font-weight: 400; …

大模型訓練與推理顯卡全指南:從硬件選型到性能優化

在人工智能技術飛速發展的今天&#xff0c;大型語言模型(LLM)已成為推動行業進步的核心動力。然而&#xff0c;訓練和部署這些“數字巨人”需要強大的計算基礎設施作為支撐&#xff0c;其中GPU的選擇直接決定了模型開發的效率與成本。本文將全面剖析當前主流GPU型號在大模型訓練…

Linux Docker的環境配置與簡單使用

參考資料 Windows Docker Desktop設置中文【Docker 】Docker Desktop for Windows&#xff08;WSL 2&#xff09;安裝WSL 2 上的 Docker 遠程容器入門 目錄 一. 環境配置1.1 安裝WSL1.2 安裝配置 Docker Desktop1.3 VS Code 插件安裝1.4 下載項目&#xff0c;配置Dockerfile 二…

函數指針與指針函數:本質區別與高級應用

目錄 一、概念本質解析 1. 函數指針&#xff08;Function Pointer&#xff09; 2. 指針函數&#xff08;Pointer Function&#xff09; 二、函數指針深度剖析 1. 基礎用法示例 2. 高級應用&#xff1a;回調函數 3. 函數指針數組 三、指針函數深入探討 1. 基礎實現模式 …

【python】基于pycharm的海康相機SDK二次開發

海康威視二次開發相機管理 這段代碼基于python開發的&#xff0c;用了opencv的一些庫函數。實現了一個完整的海康機器人相機管理工具&#xff0c;支持多相機連接、參數配置、圖像采集和實時顯示功能。目前USB相機測試無誤&#xff0c;除了丟一些包。 1. 主要類結構 HKCameraM…

HTTP 協議各個主要版本的功能特點、核心原理、使用場景總結

我們來系統總結一下 HTTP 協議各個主要版本的功能特點、核心原理&#xff08;用圖示輔助說明&#xff09;以及典型使用場景。 核心演進目標&#xff1a; 提升性能、安全性、效率和靈活性。 1. HTTP/0.9 (1991) - 遠古雛形 功能特點: 極其簡單&#xff1a; 只支持 GET 方法。無…

Linux編程:3、進程通信-信號

一、進程通信概述 &#xff08;一&#xff09;進程通信的目的 在企業開發中&#xff0c;一個項目常常需要多個進程共同協作&#xff0c;而這些進程之間需要進行通信&#xff08;交換信息&#xff09;以便協作。本章內容主要圍繞信號講解&#xff0c;其它進程通信的常用方式請…

深度解析Vue.js組件開發與實戰案例

一、Vue.js組件化思想 Vue.js的核心思想之一就是組件化開發。組件系統是Vue的一個重要概念,它允許我們使用小型、獨立和通常可復用的組件構建大型應用。在Vue中,組件本質上是一個擁有預定義選項的Vue實例。 1.1 為什么需要組件化 代碼復用:避免重復造輪子,提高開發效率可…

TensorFlow 2.0 與 Python 3.11 兼容性

TensorFlow 2.0 與 Python 3.11 兼容性 TensorFlow 2.0 官方版本對 Python 3.11 的支持有限&#xff0c;可能出現兼容性問題。建議使用 TensorFlow 2.10 或更高版本&#xff0c;這些版本已適配 Python 3.11。若需強制運行&#xff0c;可通過以下方式解決依賴沖突&#xff1a; …

MyBatisPlus 全面學習路徑

MyBatisPlus 全面學習路徑 學習目錄 第一部分&#xff1a;MyBatisPlus 基礎 MyBatisPlus 簡介與核心特性快速入門與環境搭建核心功能&#xff1a;BaseMapper 與 CRUD 接口條件構造器&#xff08;Wrapper&#xff09;詳解ActiveRecord 模式主鍵策略與通用枚舉 第二部分&…

React16,17,18,19更新對比

文章目錄 前言一、16更新二、17更新三、18更新四、19更新總結 前言 總結react 16&#xff0c;17&#xff0c;18&#xff0c;19所更新的內容&#xff0c;并且部分會涉及到原理講解。 一、16更新 1、在16.8之前更新&#xff0c;還是基于class組件的升級和維護更新。并且更新了一…

【git】有兩個遠程倉庫時的推送、覆蓋、合并問題

當你執行 git pull origin develop(或默認的 git pull)時,Git 會把遠端 origin/develop 的提交合并到你本地的 develop,如果遠端已經丟掉(或從未包含)你之前在私庫(priv)里提交過的改動,那這些改動就會被「覆蓋」,看起來就像「本地修改沒了」。 要解決這個問題,分…