Appearance
JdModalService
📚 Method
init(config)
인스턴스를 초기화 합니다. 지정된 config
를 통한 기본 세팅과 모달 관리를 위한 옵저버 등을 등록합니다.
defaultEntryComponent
: 모달이 사용할 Entry 컴포넌트를 지정합니다. 미지정시 기본 Entry 컴포넌트인 JdModalEntry.vue 를 사용합니다.
Entry 컴포넌트
모달을 감싸며 모달의 기능, 모션 처리를 담당하는 컴포넌트입니다. 💡 계층-구조
open(modalData)
모달을 엽니다.
modalData
data
: 모달에 전달하는 데이터component
: 모달로 열려고 하는 컴포넌트duration
: 열기, 닫기 애니메이션 시간overlayClose
: 오버레이 영역 클릭시 닫기 처리 여부floatingMode
: 중첩 열기시 애니메이트 처리 여부disableShadow
: 그림자 처리 여부openStrategy
: 오픈 방식 전략entryComponent
: 모달을 감싸는(모달 기능 주입, 모션 처리 등을 하는) 컴포넌트panelStyle
: 모달 패널 css 스타일
ts
const modalService = useJdModalService();
const openModal = () => {
modalService.open({
data: { hello: 10000, foo: 'bar' },
component: MySomeModalComponent,
duration: 320,
overlayClose: true,
dropShadow: false
});
}
ts
const modalRef = useJdModalRef();
console.log(modalRef.data); // { hello: 10000, foo: 'bar' }
const closeModal = () => {
modalRef.close({ closeResultValue: 1 });
}
아래와 같이 Generic 을 지정하여 분리된 컴포넌트, 컴포저블 코드에서 코드를 관리할 수 있습니다.
ts
export interface MyModalData {
hello?: number;
foo?: string;
}
export interface MyModalResult {
closeResultValue?: number;
}
ts
const modalService = useJdModalService();
const openModal = () => {
const modalRef = modalService.open<MyModalResult, MyModalData>({
data: { hello: 10000, foo: 'bar' }, // MyModalData 로 전달해야할 데이터의 코드 힌트를 얻을 수 있습니다.
component: MySomeModalComponent,
duration: 320,
overlayClose: true,
dropShadow: false
});
modalRef.observeClosed().subscribe((result) => {
console.log(result?.closeResultValue); // MyModalResult 로 모달에서 넘어오는 데이터의 코드 힌트를 얻을 수 있습니다.
// result 는 모달이 의도치 않게 닫힐 수 있으므로 undefined 일 수 있습니다.
});
}
ts
const modalRef = useJdModalRef<MyModalResult, MyModalData>();
console.log(modalRef.data?.hello); // MyModalData 로 전달받은 데이터의 코드 힌트를 얻을 수 있습니다.
const closeModal = () => {
modalRef.close({ closeResultValue: 1 }); // MyModalResult 로 모달에서 넘겨야하는 데이터의 코드 힌트를 얻을 수 있습니다.
}
closeByRef(modalRef)
지정된 modalRef 로 서비스를 통해 모달을 닫습니다.
closeById(modalId)
지정된 modalId 로 서비스를 통해 모달을 닫습니다.
close(modalId)
deprecated
closeById 와 같습니다.
closeAll(closingAnimation)
해당 서비스를 통해 열린 모달을 모두 닫습니다. closingAnimation
를 false
로 지정시 모달 닫기 애니메이션을 하지 않고 바로 닫습니다.
setDefaultEntryComponent(component)
모달이 사용할 EntryComponent.vue 를 지정합니다.
resetDefaultEntryComponent()
Entry 컴포넌트를 기본으로 제공되는 JdModalEntry.vue 를 사용하게 되돌립니다.
setUseBlockBodyScroll(bool)
모달의 갯수에 따라 body 의 style(overflow) 속성을 변경하여 scroll 을 막습니다.
setUseHistoryStrategy(bool)
히스토리 모드 사용 여부를 결정합니다.
setHistoryStrategy(HistoryStrategy)
히스토리(뒤로가기) 사용 방식을 지정합니다.
HistoryStateStrategy
: history.state 를 사용합니다.HistoryHashStrategy
: location.hash 를 사용합니다.
ts
// 이제 모달이 열린 후 뒤로가기 하면 모달이 닫힙니다.
modalService.setHistoryStrategy(new HistoryStateStrategy());
modalService.setUseHistoryStrategy(true);
setDefaultOpenStrategy(OpenStrategy)
모달 기본 오픈 전략을 지정합니다.
ts
// 이제 모달은 우측에서 열립니다.
modalService.setDefaultOpenStrategy(new StackRight());
// 이렇게 하면 특정 모달을 열 때만 전략을 지정할 수 있습니다.
modalService.open({
component: MyModalComponent,
openStrategy: new StackLeft() // 좌측에서 열립니다.
});
오픈 전략은 몇가지가 기본으로 제공됩니다.
StackNormal
: 화면 중앙에서 열립니다. 기본값 입니다.StackTop
: 위에서 열립니다.StackBottom
: 아래에서 열립니다.StackLeft
: 좌측에서 열립니다.StackRight
: 우측에서 열립니다.
OpenStrategy
오픈 전략은 직접 구현도 가능합니다. (링크: 준비중)
observeModalState()
모달이 열리거나 닫히는 등 모달 서비스의 상태가 변경 되는것을 감지할 수 있습니다. 예를 들면 열려있는 모달이 없거나, 열려있는 모달이 1개라도 있는지 알 수 있습니다.
ts
modalService.observeModalState().subscribe((modalState) => {
// modalState.modals.length
});
getState()
현재 모달의 상태를 알 수 있습니다.
getModalRef(modalId)
지정된 modalId 로 열려있는 JdModalRef 를 반환합니다.
hasModalRefNext(modalId)
지정된 modalId 의 다음 순번 JdModalRef 가 있는지 확인합니다.
isModalRefTop
지정된 modalId 가 가장 상위 모달인지 여부를 확인합니다.
swapOrder(fromIndex, toIndex)
fromIndex 위치의 모달을 toIndex 위치의 모달과 위치를 바꿉니다.
swapOrderTopByRef(modalRef)
지정된 modalRef 모달과 맨 앞의 모달의 위치를 바꿉니다.
swapOrderTopById(modalId)
지정된 modalId 모달의 위치를 맨 앞으로 옮깁니다.
pushOrder(modalRef)
지정된 modalRef 모달을 맨 앞으로 옮깁니다. 다른 모달의 순서를 뒤로 밀어냅니다.
pushOrderById
지정된 modalId 모달을 맨 앞으로 옮깁니다. 다른 모달의 순서를 뒤로 밀어냅니다.
📚 Getter
id
해당 서비스 인스턴스의 고유 id 를 반환합니다.
modals
보유하고 있는(열려있는) JdModalRef[]
를 반환합니다.
hasModal
보유하고 있는(열려있는) 모달이 있는 여부를 반환합니다.
usedBlockBodyScroll
모달이 열린 경우 body scroll block 을 하는지 여부를 반환합니다.
@see
: setUseBlockBodyScroll
usedHistoryStrategy
히스토리 모드를 사용하고 있는지 여부를 반환합니다.
@see
: setUseHistoryStrategy
historyStrategy
지정 되어있는 히스토리 전략을 반환합니다.
@see
: setHistoryStrategy
destroy()
서비스를 파기합니다. 보통은 서비스를 파기할 일이 없습니다.