Skip to content

간단한 사용법 및 구성

📣 NOTE

예제를 보기 좋게 하기 위해 버튼과 같은 UI 는 element-plus 가 사용되었습니다.

아래는 아주 간단한 모달을 여는 예제 입니다.

예제

  • useJdModalService 를 통해 서비스(JdModalService)를 사용할 수 있습니다.
  • useJdModalRef 를 통해 모달 참조자(JdModalRef)를 사용할 수 있습니다.

📣 useJdModalRef

열린 모달 컴포넌트와 그 하위 계층에서는 useJdModalRef 를 사용하여 JdModalRef 인스턴스를 사용할 수 있습니다. JdModalRef 는 모달 인스턴스로 전달된 모든 정보(data)를 관리하며, 모달을 닫는(close) 등 모달이 해야할 일을 관리하는 객체입니다.

vue
<template>
  <div class="example">
    <el-button type="primary" @click="onOpen">Modal open</el-button>
  </div>
</template>

<script lang="ts" setup>
import { useJdModalService } from '@jood/v-modal';
import ExampleModal from './ExampleModal.vue';

const modalService = useJdModalService();

const onOpen = () => {
  modalService.open({
    component: ExampleModal,
    overlayClose: true,
  });
};
</script>
vue
<template>
  <div class="example-modal">
    <div class="message">안녕하세요!</div>
    <el-button type="danger" @click="onClose">Modal close</el-button>
  </div>
</template>

<script lang="ts" setup>
import { useJdModalRef } from '@jood/v-modal';

const modalRef = useJdModalRef();

const onClose = () => {
  modalRef.close();
};
</script>

<style lang="scss" scoped>
.example-modal {
  display: flex;
  flex-direction: column;
  padding: 20px;
  width: 90vw;
  max-width: 320px;
  box-sizing: border-box;
  .message {
    padding: 20px 5px 40px 5px;
    font-size: 1.5rem;
    font-weight: bold;
    text-align: center;
  }
}
</style>

JdModalService

모달을 열고, 전체 모달을 관리하는 핵심 서비스 입니다.

ts
import SomeModal from './SomeModal.vue';

const modalService = useJdModalService();
const onOpen = () => {
  modalService.open({
    component: SomeModal,
    data: { foo: 'bar' },
    overlayClose: true
  });
};

JdModalRef

하나의 모달을 관리하는 핵심 객체 입니다.

ts
const modalRef = useJdModalRef();
// console.log(modalRef.data); // { foo: 'bar' }
const onClose = () => {
  modalRef.close(); // 모달을 열었던 곳으로 결과를 전달 할 수도 있습니다.
};

계층 구조

위의 ExampleModal.vue 는 아래와 같은 구조로 열리게 되며, 해당 컴포넌트를 포함한 하위 컴포넌트에서는 useJdModalRef 를 사용할 수 있게 됩니다. (useJdModalService 역시 사용 가능합니다. 😀)

ExamplePage.vue
  • Modal open 👇

JdModalProvider.vue
  • 이 컴포넌트는 모달 서비스의 상태를 관찰하며 모달의 렌더링을 관리합니다.
JdModalEntry.vue
  • 이 컴포넌트는 모달의 애니메이션과 overlayClose 처리 등 기본 구현이 포함됩니다.
  • 가장 중요한 JdModalRef 의 주입(provide)을 담당합니다.
ExampleModal.vue
  • 서비스를 통해 열린 모달 컴포넌트 입니다.
  • 이 컴포넌트와 하위 계층에서는 useJdModalRef 를 통해 JdModalRef 를 사용할 수 있습니다.