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

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

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

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]으로 문의하세요.
최신 튜토리얼 더>
  • 프록시 디자인 패턴
    프록시 디자인 패턴
    이전 블로그에서 객체 생성 메커니즘을 다루는 다양한 창의적 디자인 패턴을 살펴봤습니다. 이제 객체와 클래스를 구성하여 유연성과 효율성을 유지하면서 더 큰 구조를 형성하는 방법에 초점을 맞춘 구조적 디자인 패턴을 살펴보겠습니다. 프록시 디자인 패턴부터 시작해 보겠습니다....
    프로그램 작성 2024-11-06에 게시됨
  • \"src\" 속성을 사용하여 외부 JavaScript 파일에 인라인 스크립트를 포함할 수 있습니까?
    \"src\" 속성을 사용하여 외부 JavaScript 파일에 인라인 스크립트를 포함할 수 있습니까?
    SRC 속성을 사용하여 외부 JavaScript 파일에 인라인 스크립트를 포함할 수 있습니까?JavaScript는 일반적으로 외부 스크립트 파일을 사용하여 포함되지만, 일반적인 질문이 생깁니다. src 속성을 사용하여 외부 파일 내에 인라인 스크립트를 통합할 수 있습니...
    프로그램 작성 2024-11-06에 게시됨
  • Go에서 HTTP POST 요청의 진행 상황을 추적하는 방법은 무엇입니까?
    Go에서 HTTP POST 요청의 진행 상황을 추적하는 방법은 무엇입니까?
    Go에서 HTTP POST 요청 진행 상황 추적POST 요청을 통해 대용량 파일과 이미지를 보낼 때 개발자는 업로드 진행 상황을 추적하는 데 종종 어려움을 겪습니다. . 이 질문은 Go 애플리케이션에서 이러한 요청의 진행 상황을 모니터링하는 신뢰할 수 있는 방법을 탐구...
    프로그램 작성 2024-11-06에 게시됨
  • Java의 폴더에서 파일 이름 목록을 어떻게 얻을 수 있습니까?
    Java의 폴더에서 파일 이름 목록을 어떻게 얻을 수 있습니까?
    Java를 사용하여 폴더에서 파일 이름 가져오기디렉토리 내의 파일 이름 목록을 가져오는 작업은 다양한 환경에서 일반적인 요구 사항입니다. 프로그래밍 시나리오. Java에서 이를 달성하려면 File 클래스를 활용하는 간단한 접근 방식이 있습니다.코드 접근 방식:시작하려면...
    프로그램 작성 2024-11-06에 게시됨
  • 각도 파이프: 종합 가이드
    각도 파이프: 종합 가이드
    Angular의 파이프는 기본 데이터를 수정하지 않고 템플릿의 데이터를 변환하는 데 사용되는 간단한 함수입니다. 파이프는 값을 가져와서 처리하고 형식이 지정되거나 변환된 출력을 반환합니다. 날짜, 숫자, 문자열은 물론 배열이나 객체의 형식을 지정하는 데 자주 사용됩니다...
    프로그램 작성 2024-11-06에 게시됨
  • Tailwind CSS 및 다크 모드
    Tailwind CSS 및 다크 모드
    이 도움말에서는 Tailwind CSS에서 어두운 모드를 구현하는 방법을 살펴보겠습니다. 다크 모드는 저조도 환경에서 더 나은 사용자 경험을 제공하고 눈의 피로를 줄여주기 때문에 인기 있는 디자인 트렌드가 되었습니다. Tailwind를 사용하면 내장된 유틸리티를 통해 ...
    프로그램 작성 2024-11-06에 게시됨
  • CakePHP의 Find 메소드를 사용하여 JOIN 쿼리를 수행하는 방법은 무엇입니까?
    CakePHP의 Find 메소드를 사용하여 JOIN 쿼리를 수행하는 방법은 무엇입니까?
    JOIN을 사용한 CakePHP 찾기 메서드CakePHP 찾기 메서드는 테이블 조인을 포함하여 데이터베이스에서 데이터를 검색하는 강력한 방법을 제공합니다. 이 문서에서는 CakePHP의 find 메소드를 사용하여 JOIN 쿼리를 수행하는 두 가지 방법을 보여줍니다.방법...
    프로그램 작성 2024-11-06에 게시됨
  • 결과를 다시 계산하거나 저장하지 않고 Python에서 생성기를 어떻게 재사용할 수 있나요?
    결과를 다시 계산하거나 저장하지 않고 Python에서 생성기를 어떻게 재사용할 수 있나요?
    재설정을 통해 Python에서 생성기 재사용Python에서 생성기는 일련의 요소를 반복하기 위한 강력한 도구입니다. 그러나 반복이 시작된 후에는 생성기를 되돌릴 수 없습니다. 생성기를 여러 번 재사용해야 하는 경우 이는 문제가 될 수 있습니다.생성기를 재사용하는 전략 ...
    프로그램 작성 2024-11-06에 게시됨
  • JavaScript 개발자를 위한 최고의 S 코드 확장
    JavaScript 개발자를 위한 최고의 S 코드 확장
    JavaScript는 빠르게 발전하고 있으며 이를 둘러싼 도구 생태계도 마찬가지입니다. 개발자로서 귀하는 작업 흐름을 최대한 효율적이고 원활하게 만들고 싶어합니다. 이것이 Visual Studio Code(VS Code)가 들어오는 곳입니다. 저는 JavaScript ...
    프로그램 작성 2024-11-06에 게시됨
  • 계산 결과를 표시하기 위해 HTML 출력 태그를 사용하는 방법.
    계산 결과를 표시하기 위해 HTML 출력 태그를 사용하는 방법.
    돌아온 것을 환영합니다! 모두가 주말을 즐겼기를 바랍니다. 오늘은 HTML 태그로 다시 돌아가 태그에 집중해 보겠습니다. 태그가 무엇인가요? 태그는 계산 결과를 표시하는 데 사용됩니다. 인라인 요소이며 , 또는 기타 인라인 요소 안에 배치할 수 있...
    프로그램 작성 2024-11-06에 게시됨
  • Java: 변수, 데이터 유형 및 입력/출력 이해
    Java: 변수, 데이터 유형 및 입력/출력 이해
    소개: Java는 세계에서 가장 인기 있고 다재다능한 프로그래밍 언어 중 하나이며 웹 애플리케이션부터 모바일 앱까지 모든 분야에서 사용됩니다. Java로의 여정을 시작하는 경우 기본 사항을 이해하는 것이 중요합니다. 이 가이드에서는 모든 Java 프로그...
    프로그램 작성 2024-11-06에 게시됨
  • 높이를 기준으로 Div의 종횡비를 어떻게 유지할 수 있습니까?
    높이를 기준으로 Div의 종횡비를 어떻게 유지할 수 있습니까?
    높이에 따른 Div의 가로 세로 비율 유지웹 디자인에서 요소의 가로 세로 비율을 제어하는 ​​것은 반응형 레이아웃에 중요합니다. 이 질문은 div의 너비를 높이의 백분율로 유지하여 높이 변경에 관계없이 요소의 모양이 일관되게 유지되도록 하는 방법을 탐구합니다.기존 접근...
    프로그램 작성 2024-11-06에 게시됨
  • Flet에서 DatePicker 처리
    Flet에서 DatePicker 처리
    플렛이 DatePicker를 구현하도록 요청하는 프로젝트의 최종 버전입니다. Veamos el ejemplo que proporciona la documentación oficial de Flet. import datetime import flet as ft def m...
    프로그램 작성 2024-11-06에 게시됨
  • 원형 SVG 마스크에 맞게 이미지 크기를 조정하는 방법은 무엇입니까?
    원형 SVG 마스크에 맞게 이미지 크기를 조정하는 방법은 무엇입니까?
    원형 SVG 경로에 맞게 이미지 크기 조정SVG 경로를 사용하여 이미지에서 원형 부분을 자르려고 할 때 중요합니다. 올바른 정렬을 보장합니다. 이미지가 잘 맞지 않으면 SVG 마스크의 잘못된 크기 또는 위치 지정이 원인일 수 있습니다.원하는 결과를 얻기 위한 대체 접근...
    프로그램 작성 2024-11-06에 게시됨
  • 기술 면접 질문 - 파트 Typescript
    기술 면접 질문 - 파트 Typescript
    Introduction Hello, hello!! :D Hope you’re all doing well! How we’re really feeling: I’m back with the second part of this series. ? In this...
    프로그램 작성 2024-11-06에 게시됨

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

Copyright© 2022 湘ICP备2022001581号-3