」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 修正 Vue 的 vue-js-modal 函式庫復原模態功能指南

修正 Vue 的 vue-js-modal 函式庫復原模態功能指南

發佈於2024-08-19
瀏覽:457

Fixing vue-js-modal Library for Vue A Guide to Restoring Modal Functionality

在我的一個 Vue 2 專案中,我使用了 vue-js-modal 函式庫。然而,將專案從 Vue 2 遷移到 Vue 3 後,模式無法正常運作。儘管進行了廣泛的研究,但我找不到任何解決此問題的文件或討論,這促使我寫了這篇文章。

在這篇文章中,我將分享我為使 vue-js-modal 適應 Vue 3 所做的更改。我希望這些見解對您有幫助!

首先,請查看 GitHub 線程並應用此處建議的更改:https://github.com/euvl/vue-js-modal/issues/814

遵循 GitHub 執行緒的建議後,您可能仍會在 Vue 3 專案中遇到模式問題。為了完全解決這些問題,我對 PluginCore.js 和 Plugin.js 檔案進行了一些更改。您將在下面找到這些變更的詳細資訊。

Plugin.js 中的更改
修改插件:

import Modal from './components/Modal.vue';
import Dialog from './components/Dialog.vue';
import PluginCore from './PluginCore';

const Plugin = {
    install(app, options = {}) {
        if (app.config.globalProperties.$modal) {
            return;
        }

        const plugin = PluginCore(options);

        app.config.globalProperties.$modal = plugin;
        app.provide('$modal', plugin);

        app.mixin({
            mounted() {
                if (this.$root === this) {
                    if (!plugin.context.root) {
                        plugin.setDynamicModalContainer(this);
                    }
                }
            },
        });

        app.component(plugin.context.componentName, Modal);

        if (options.dialog) {
            app.component('Dialog', Dialog);
        }
    },
};

export default Plugin;

PluginCore.js 中的更改
導入與初始化:

用以下內容取代現有的導入和初始化:

import { h, render, createVNode } from 'vue';

顯示動態模態:

更新顯示動態模態的邏輯:

const showDynamicModal = (
    component,
    componentProps,
    componentSlots,
    modalProps = componentSlots || {},
    modalEvents
) => {
    const container = context.root?.__modalContainer;
    const defaults = options.dynamicDefaults || {};

    if (!container) {
        console.warn('Modal container not found. Make sure the dynamic modal container is set.');
        return;
    }
    container.add(
        component,
        componentProps,
        componentSlots,
        { ...defaults, ...modalProps },
        modalEvents
    );
};

設定動態模態容器:

修改負責設定模態容器的函數:

const setDynamicModalContainer = (root) => {
    context.root = root;

    if (!root) {
        console.warn('Root component is undefined. Make sure the root instance is passed correctly.');
        return;
    }

    const element = createDivInBody();

    const vnode = createVNode(ModalsContainer);
    vnode.appContext = root.$.appContext;

    try {
        return render(vnode, element);
    } catch (error) {
        console.error('Error rendering vnode:', error);
    }
};

ModalsContainer.vue 的最終更改
作為遷移到 Vue 3 的一部分,有必要在 ModalsContainer.vue 元件中進行具體調整。

更新事件監聽器:

在 ModalsContainer.vue 檔案中,刪除現有的 v-on="$listeners" 指令並將其替換為:

v-on="modal.componentListeners" || {}

此更改應在第 13 行進行。

透過進行這些調整,您應該能夠成功遷移 vue-js-modal 庫以與 Vue 3 無縫協作。我希望這些步驟可以幫助您解決模態的任何剩餘問題!如果您需要進一步的協助,請隨時在評論部分提問。此外,如果您有任何反饋或見解,我將不勝感激,因此請隨時在下面留下您的評論

https://www.aliozzaim.com

參考
https://github.com/euvl/vue-js-modal/issues/814
https://github.com/euvl/vue-js-modal

版本聲明 本文轉載於:https://dev.to/aliozzaim/fixing-vue-js-modal-library-for-vue-3-a-guide-to-restoring-modal-functionality-2lai?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何用 SQLSRV 取代 PHP 5.3 中已棄用的 MSSQL 擴充?
    如何用 SQLSRV 取代 PHP 5.3 中已棄用的 MSSQL 擴充?
    PHP 5.3 中MSSQL 擴展的替代方案隨著PHP 5.3 中MSSQL 擴展的棄用,尋求替代解決方案變得至關重要。本文深入研究 SQLSRV 擴充功能作為連接 Microsoft SQL 資料庫的可行選項。 根據 PHP 手冊,PHP 5.3 及更高版本不再支援 MSSQL 擴充。作為替代,M...
    程式設計 發佈於2024-11-06
  • 何時使用 AtomicBoolean:防止多執行緒應用程式中的資料不一致?
    何時使用 AtomicBoolean:防止多執行緒應用程式中的資料不一致?
    AtomicBoolean:Volatile Boolean 的更強大的替代品在多線程編程中,確保對共享數據的正確和一致的訪問至關重要。一種常見的方法是使用 volatile 關鍵字將欄位標記為共享,確保對變數的變更對其他執行緒立即可見。但是, volatile 關鍵字存在一些限制,可能會導致問題,...
    程式設計 發佈於2024-11-06
  • Jsoup 如何讓 Java 中的網頁抓取變得簡單又有效率?
    Jsoup 如何讓 Java 中的網頁抓取變得簡單又有效率?
    Java 中網頁抓取的HTML 解析在軟體開發領域,有必要從網站中提取有價值的資訊以用於各種目的。這種從線上來源提取資料的過程通常稱為網頁抓取。 Java 程式設計師可以使用多功能工具來完成此任務:HTML 解析器。 強烈建議的 Java HTML 解析器是 Jsoup。它的出色之處在於其用戶友好的...
    程式設計 發佈於2024-11-06
  • Jetmaker - 用於以 Python 建構分散式系統的開源框架
    Jetmaker - 用於以 Python 建構分散式系統的開源框架
    專案:Jetmaker 它是 Python 開發人員將多個分散式節點連接到一個系統中的框架,因此分散式應用程式可以存取彼此的資料和服務。它還提供了同步所有節點的工具,就像在多線程和多處理中所做的那樣 Github連結:https://github.com/gavinwei121/Jetmaker 文...
    程式設計 發佈於2024-11-06
  • 馴服電子郵件野獸:我的收件匣管理人工智慧之旅
    馴服電子郵件野獸:我的收件匣管理人工智慧之旅
    是否曾经感觉您的收件箱是一个数字九头蛇,为您回复的每个人发送两封新电子邮件? ??好吧,科技爱好者们,我决定用秘密武器来对付这个怪物:人工智能! ??️ 尤里卡时刻 想象一下:现在是凌晨 3 点,我周围都是空咖啡杯☕☕☕,盯着一个数量可与国会图书馆相媲美的收件箱。就在那时,我突然想到...
    程式設計 發佈於2024-11-06
  • 為什麼 Go 是智能合約開發的新競爭者
    為什麼 Go 是智能合約開發的新競爭者
    区块链生态系统迅速发展,引入了创新的解决方案和平台,扩展了分布式账本技术的潜力。这项创新的核心是智能合约——自动执行的程序,无需中介即可自动执行协议。传统上,Solidity 一直是编写智能合约的首选语言,尤其是以太坊区块链。 Solidity 旨在在以太坊虚拟机 (EVM) 中运行,为开发人员提供...
    程式設計 發佈於2024-11-06
  • 如何在等待執行緒完成時保持 tkinter GUI 回應?
    如何在等待執行緒完成時保持 tkinter GUI 回應?
    等待線程完成時凍結/掛起tkinter GUI在Python 中使用tkinter GUI 工具包時遇到的常見問題執行某些操作時介面凍結或掛起。這通常是由於在主事件循環中使用了阻塞操作,例如加入執行緒。 瞭解 tkinter Mainlooptkinter mainloop() 是負責處理使用者輸入...
    程式設計 發佈於2024-11-06
  • C 和 C++ 中條件運算子的行為有什麼不同?
    C 和 C++ 中條件運算子的行為有什麼不同?
    條件運算子:剖析C 與C 的差異在程式設計領域,條件運算子(?:) 充當計算表達式並根據結果傳回特定值的簡潔方法。雖然此運算符在 C 和 C 中的操作類似,但出現了一個微妙的區別,可能會影響程式碼執行。 C:對左值的限制在 C 中,條件運算子會對傳回左值(駐留在特定記憶體位址的變數)施加限制。這表示...
    程式設計 發佈於2024-11-06
  • Java中如何有效率地檢查字串中是否存在某個字元?
    Java中如何有效率地檢查字串中是否存在某個字元?
    高效字串字元驗證在Java中,一個常見的任務是判斷某個特定字元是否出現在字串中。雖然傳統方法涉及遍歷字串,但利用 indexOf() 的有效替代方法消除了循環的需要。 IndexOf() 逐個字元掃描字串,並傳回指定字元所在的第一個實例的索引出現。如果該字元不存在,則傳回值 -1。 考慮檢查字元「a...
    程式設計 發佈於2024-11-06
  • 如何使用 PHP 為圖片添加浮水印?
    如何使用 PHP 為圖片添加浮水印?
    使用PHP 向圖像添加浮水印如果您正在使用允許用戶上傳圖像的網站,則可能需要添加這些圖像的浮水印,以防止未經授權的使用。添加浮水印可確保您的徽標或品牌在每個上傳的圖像上都可見。以下是如何在PHP 中實現此目的:使用PHP 函數PHP 手冊提供了使用以下函數的綜合範例:imagecreatefromp...
    程式設計 發佈於2024-11-06
  • 如何抑制 Tensorflow 調試輸出?
    如何抑制 Tensorflow 調試輸出?
    抑制Tensorflow調試信息Tensorflow可能會在初始化時在終端中顯示調試信息,包括加載的庫和發現的設備。雖然此資訊對於偵錯目的很有用,但它也會使控制台混亂並使追蹤重要訊息變得困難。 要停用此偵錯訊息,您可以使用 os.environ 模組:import os os.environ['TF...
    程式設計 發佈於2024-11-06
  • 如何確定我的 MySQL 查詢是否利用了索引?
    如何確定我的 MySQL 查詢是否利用了索引?
    識別 MySQL 索引的效能優化 MySQL 查詢時,評估索引的有效性至關重要。 取得索引效能指標要確定您的查詢是否使用索引,請執行下列查詢:EXPLAIN EXTENDED SELECT col1, col2, col3, COUNT(1) FROM table_name WHERE col1...
    程式設計 發佈於2024-11-06
  • 如何更改 WAMP/MySQL 中錯誤訊息的語言?
    如何更改 WAMP/MySQL 中錯誤訊息的語言?
    WAMP/MySQL 中的語言錯誤WAMP/MySQL 中的語言錯誤許多用戶都遇到WAMP/MySQL 中的錯誤未以正確的語言顯示的問題。多次重新安裝WAMP並蒐索大量資源後,該問題仍然存在。 要解決此問題,需要修改my.ini檔案。 修改my.ini檔案# Change your locale h...
    程式設計 發佈於2024-11-06
  • Item - 傳回空集合或陣列而不是 null
    Item - 傳回空集合或陣列而不是 null
    不回傳 null: 傳回 null 取代空集合或陣列的方法需要額外的客戶端處理以避免異常。 null 問題: 客戶端需要新增冗餘檢查(如果要檢查null)。 這些檢查中的遺漏可能會被忽視,從而導致錯誤。 傳回集合或陣列的方法很難實現。 反對 null 的參數: 不要擔心分配空集合或陣列的效...
    程式設計 發佈於2024-11-06
  • 節點 JS || Epress js ||作者:穆尼塞卡·烏達瓦拉帕蒂
    節點 JS || Epress js ||作者:穆尼塞卡·烏達瓦拉帕蒂
    Express js 編寫簡單的express js應用程式 npm 初始化 npm 安裝 Express const express=require('expreass'); const app=express(); app.use('/',(req,res,next)=>{ rse...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3