Maison >interface Web >js tutoriel >Correction de la bibliothèque vue-js-modal pour Vue Un guide pour restaurer la fonctionnalité modale

Correction de la bibliothèque vue-js-modal pour Vue Un guide pour restaurer la fonctionnalité modale

WBOY
WBOYoriginal
2024-08-11 06:43:321147parcourir

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

Dans l'un de mes projets Vue 2, j'ai utilisé la bibliothèque vue-js-modal. Cependant, après avoir migré le projet de Vue 2 vers Vue 3, le modal n'a pas fonctionné correctement. Malgré des recherches approfondies, je n'ai trouvé aucune documentation ou discussion traitant de cette question, ce qui m'a amené à écrire cet article.

Dans cet article, je partagerai les modifications que j'ai apportées pour adapter vue-js-modal pour Vue 3. J'espère que ces informations vous seront utiles !

Tout d'abord, veuillez consulter le fil de discussion GitHub et appliquer les modifications suggérées ici : https://github.com/euvl/vue-js-modal/issues/814

Après avoir suivi les suggestions du fil de discussion GitHub, vous pourriez toujours rencontrer des problèmes avec le modal dans votre projet Vue 3. Pour résoudre complètement ces problèmes, j'ai apporté plusieurs modifications aux fichiers PluginCore.js et Plugin.js. Ci-dessous, vous trouverez le détail de ces changements.

Modifications dans Plugin.js
Modifier le 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;

Modifications dans PluginCore.js
Importations et initialisation :

Remplacez les importations et l'initialisation existantes par ce qui suit :

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

Afficher le modal dynamique :

Mettre à jour la logique d'affichage des modaux dynamiques :

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

Définir un conteneur modal dynamique :

Modifier la fonction chargée de définir le conteneur modal :

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

Modifications finales dans ModalsContainer.vue
Dans le cadre de la migration vers Vue 3, il a été nécessaire de procéder à un ajustement spécifique dans le composant ModalsContainer.vue.

Mise à jour des auditeurs d'événements :

Dans le fichier ModalsContainer.vue, supprimez la directive v-on="$listeners" existante et remplacez-la par :

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

Ce changement doit être effectué à la ligne numéro 13.

En effectuant ces ajustements, vous devriez pouvoir migrer avec succès la bibliothèque vue-js-modal pour fonctionner de manière transparente avec Vue 3. J'espère que ces étapes vous aideront à résoudre tous les problèmes restants avec vos modaux ! Si vous avez besoin d'aide supplémentaire, n'hésitez pas à demander dans la section commentaires. De plus, j'apprécierais vos commentaires ou idées, alors n'hésitez pas à laisser vos commentaires ci-dessous

https://www.aliozzaim.com

références
https://github.com/euvl/vue-js-modal/issues/814
https://github.com/euvl/vue-js-modal

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn