Heim > Web-Frontend > js-Tutorial > Korrektur der vue-js-modal-Bibliothek für Vue. Ein Leitfaden zur Wiederherstellung der modalen Funktionalität

Korrektur der vue-js-modal-Bibliothek für Vue. Ein Leitfaden zur Wiederherstellung der modalen Funktionalität

WBOY
Freigeben: 2024-08-11 06:43:32
Original
1155 Leute haben es durchsucht

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

In einem meiner Vue 2-Projekte habe ich die vue-js-modal-Bibliothek verwendet. Nach der Migration des Projekts von Vue 2 auf Vue 3 funktionierte das Modal jedoch nicht richtig. Trotz umfangreicher Recherchen konnte ich keine Dokumentation oder Diskussionen zu diesem Thema finden, was mich dazu veranlasste, diesen Artikel zu schreiben.

In diesem Artikel werde ich die Änderungen teilen, die ich vorgenommen habe, um vue-js-modal für Vue 3 anzupassen. Ich hoffe, dass Sie diese Erkenntnisse hilfreich finden!

Bitte lesen Sie zunächst den GitHub-Thread und wenden Sie die hier vorgeschlagenen Änderungen an: https://github.com/euvl/vue-js-modal/issues/814

Nachdem Sie die Vorschläge aus dem GitHub-Thread befolgt haben, können in Ihrem Vue 3-Projekt immer noch Probleme mit dem Modal auftreten. Um diese Probleme vollständig zu beheben, habe ich mehrere Änderungen an den Dateien PluginCore.js und Plugin.js vorgenommen. Nachfolgend finden Sie die Einzelheiten zu diesen Änderungen.

Änderungen in Plugin.js
Ändern Sie das Plugin:

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;
Nach dem Login kopieren

Änderungen in PluginCore.js
Importe und Initialisierung:

Ersetzen Sie die vorhandenen Importe und Initialisierungen durch Folgendes:

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

Nach dem Login kopieren

Dynamisches Modal anzeigen:

Aktualisieren Sie die Logik für die Anzeige dynamischer Modalitäten:

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
    );
};

Nach dem Login kopieren

Dynamischen modalen Container festlegen:

Ändern Sie die Funktion, die für das Festlegen des modalen Containers verantwortlich ist:

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);
    }
};

Nach dem Login kopieren

Endgültige Änderungen in ModalsContainer.vue
Im Rahmen der Migration auf Vue 3 war eine spezifische Anpassung in der ModalsContainer.vue-Komponente erforderlich.

Ereignis-Listener aktualisieren:

Entfernen Sie in der Datei ModalsContainer.vue die vorhandene v-on="$listeners"-Direktive und ersetzen Sie sie durch:

v-on="modal.componentListeners" || {}
Nach dem Login kopieren

Diese Änderung sollte in Zeile 13 vorgenommen werden.

Durch diese Anpassungen sollten Sie in der Lage sein, die vue-js-modal-Bibliothek erfolgreich zu migrieren, damit sie nahtlos mit Vue 3 funktioniert. Ich hoffe, diese Schritte helfen Ihnen, alle verbleibenden Probleme mit Ihren Modalen zu lösen! Wenn Sie weitere Hilfe benötigen, zögern Sie bitte nicht, im Kommentarbereich nachzufragen. Darüber hinaus würde ich mich über Ihr Feedback oder Ihre Erkenntnisse freuen. Sie können also gerne unten Ihre Kommentare hinterlassen

https://www.aliozzaim.com

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

Das obige ist der detaillierte Inhalt vonKorrektur der vue-js-modal-Bibliothek für Vue. Ein Leitfaden zur Wiederherstellung der modalen Funktionalität. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage