Vue
[Vue3] vue slot
jjineei
2022. 11. 1. 17:53
공부는 끝이 없고, 오늘도 소스를 보다가 항상 그냥 대충 감으로 지나친 slot에 대한 정리를 한다.
Vue slot
- 부모 컴포넌트에서 자식 컴포넌트의 엘리먼트를 지정할 때 사용.
- 부모 : 자식 컴포넌트 가져다 씀. ( 자식 vue import 해서 태그로 사용)
- 자식이 slot 태그로 선언
- 부모가 태그속성에 slot 사용
* 자식 컴포넌트
<template>
<div>
<header>
<slot name="child" :childData="childData" :close="close">
<button>버튼</button>
</slot>
</header>
<div>
<slot name="body">
<p>기본 바디</p>
</slot>
</div>
</div>
</template>
<script>
export default {
name: "BaseModal",
data() {
return {
childData: "child",
active: false
};
},
methods: {
close() {
this.active = false;
}
}
};
</script>
*부모 컴포넌트
<template>
<div>
<BaseModal>
<template v-slot:child="slotProps">
<button @click="slotProps.close">닫기</button>
<!-- { hello: 'hello' } -->
{{ slotProps }}
</template>
<template v-slot:body>
<p>바디입니다.</p>
</template>
</BaseModal>
</div>
</template>
<script>
import BaseModal from "./BaseModal.vue";
export default {
name: "ParentModal",
components: {
BaseModal,
},
};
</script>
*결과
Codesandbox URL
https://codesandbox.io/s/admiring-johnson-8ljjul?file=/src/components/ParentModal.vue
admiring-johnson-8ljjul - CodeSandbox
admiring-johnson-8ljjul by jyn-choi using vue
codesandbox.io