"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Vue용 vue-js-modal 라이브러리 수정 모달 기능 복원 가이드

Vue용 vue-js-modal 라이브러리 수정 모달 기능 복원 가이드

2024-08-19에 게시됨
검색:970

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

Vue 2 프로젝트 중 하나에서 vue-js-modal 라이브러리를 활용했습니다. 그런데 프로젝트를 Vue 2에서 Vue 3으로 마이그레이션한 후 모달이 제대로 작동하지 않았습니다. 광범위한 조사에도 불구하고 이 문제를 다루는 문서나 토론을 찾을 수 없어서 이 기사를 작성하게 되었습니다.

이 글에서는 Vue 3에 vue-js-modal을 적용하기 위해 변경한 내용을 공유하겠습니다. 이러한 통찰력이 도움이 되기를 바랍니다!

먼저 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-functionity-2lai?1에 재현되어 있습니다. 침해, 삭제하려면 [email protected]으로 문의하세요.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3