반응형
<template>
<q-dialog :model-value="modelValue" @update:model-value="(val) => $emit('update:modelValue')"
@hide="changeViewMoed('SignInForm')">
<q-card :style="{width : '400px'}">
<q-card-section class="flex justify-end">
<q-btn icon="close" flat round dense v-close-popup />
</q-card-section>
<q-card-section class="q-px-xl q-pb-xl">
<component :is="authViewComponents[viewMode]" @change-view="changeViewMoed" />
<!-- v-if를 활용한 조건부 렌더링 -->
<!-- <SignInFrom v-if="viewMode == 'SignInFrom'" @change-view="changeViewMoed"/>
<SignUpFrom v-else-if="viewMode == 'SignUpFrom'" @change-view="changeViewMoed"/>
<FindPasswordFrom v-else-if="viewMode == 'FindPasswordFrom'" @change-view="changeViewMoed"/> -->
</q-card-section>
</q-card>
</q-dialog>
</template>
<script setup>
import { ref, defineAsyncComponent } from 'vue';
// import SignInForm from './SignInForm.vue';
// import SignUpForm from './SignUpForm.vue';
// import FindPasswordForm from './FindPasswordForm.vue';
defineProps({
modelValue : {
type : Boolean,
default : false,
}
})
defineEmits(['update:modelValue'])
const viewMode = ref('SignInForm');
const changeViewMoed = (mode) => {
console.log(mode);
viewMode.value = mode;
}
// const authViewComponents = {
// SignInForm,
// SignUpForm,
// FindPasswordForm
// }
const authViewComponents = {
SignInForm: defineAsyncComponent(() => import('./SignInForm.vue')),
SignUpForm: defineAsyncComponent(() => import('./SignUpForm.vue')),
FindPasswordForm: defineAsyncComponent(() => import('./FindPasswordForm.vue'))
}
</script>
<style lang="scss" scoped>
</style>
반응형
'vue.js > vue3 & Firebase 10 커뮤니티 만들기 풀스택' 카테고리의 다른 글
vite-plugin-vue-layouts (0) | 2023.12.02 |
---|---|
VSCode 확장 프로그램 (0) | 2023.12.02 |