조건부 slot
v-if="$slots.슬롯명"을 사용해서 slot을 조건부로 표시할수있다 (예제의 1번 참고)
동적 slot
변수에 슬롯명을 할당한후 동적으로 slot을 표시할수있다( 예제의 3번 참고 )
#[변수명]
v-slot:[변수명]
등으로 사용가능하다
대체 컨텐츠를 사용한 slot
해당 slot이 사용되지 않을 경우 대체 컨텐츠(fallback:대비책)이 표시된다 ( 예제의 2번 참고 )
<slot>대체표시컨텐츠</slot>
부모템플릿
<script setup>
import Card from './Card.vue'
const dynamicSlotName="footer"
</script>
<template>
<Card>
<template #header> <!-- 1.조건부 slot예제 -->
<h3>헤더입니다</h3>
</template>
<template #default> <!-- 2.대체 컨텐츠를 사용한 slot예제 -->
<h3>컨텐츠입니다</h3>
</template>
<template #[dynamicSlotName]> <!-- 3.동적 slot예제 -->
<h3>푸터입니다</h3>
</template>
</Card>
</template>
자식컴포넌트
<template>
<div class="card">
<div v-if="$slots.header" class="card-header">
header 슬롯이 존재할 경우 표시됩니다
<slot name="header" />
</div>
<div class="card-content">
<slot >
해당 슬롯에 아무것도 입력되지 않았습니다 (fallback)
</slot>
</div>
<div class="card-footer">
동적으로 이름을 지정한 footer슬롯이 표시됩니다
<slot name="footer" />
</div>
</div>
</template>
<style>
.card {
border: 1px solid black;
padding: 0;
}
.card-header {
background-color: skyblue;
padding: 4px;
}
.card-content {
padding: 4px;
}
.card-footer {
background-color: beige;
padding: 4px;
}
</style>
참고
May 18, 2024
Views 76