[Vue] props 말고 slot
[Vue] props 말고 slot
부모 컴포넌트로부터 자식컴포넌트로 데이터를 받아오는 방법으로 props 말고 slot이 있다.
props를 보내고 받고 사용하는 과정 없이도 직관적으로 데이터를 컴포넌트로 보낼 수 있다.
slot은 데이터 바인딩을 HTML에다가 할 때 사용한다.
속성 등에는 사용할 수 없다.
slot 문법 2가지 step
- 자식 컴포넌트에서
<slot></slot>영역 만들기 - 부모 컴포넌트에서 자식컴포넌트 사이에 입력한 자료가 slot에 들어가게 된다.
1. 자식 컴포넌트에, 데이터를 받을 <slot></slot> 영역 만들기
1
2
3
4
5
6
7
(FilterBox.vue)
<template>
<div class="filter-item" :class="`${filter}`" :style="{ backgroundImage : `url(${uploadImage})` }">
<slot></slot>
</div>
</template>
2. 부모 컴포넌트에서 자식컴포넌트 사이에 자료 입력
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(Container.vue)
...
<div class="filters">
<ul>
<li class="filter-1" v-for="(a,i) in filter" :key="i">
<FilterBox :uploadImage="uploadImage" :filter="a">
<!-- FilterBox 컴포넌트의 slot 자리에 들어갈 데이터 -->
{{ a }}
</FilterBox>
</li>
</ul>
</div>
...
슬롯 여러 개 사용할 때
1
2
3
4
5
6
7
8
9
10
(FilterBox.vue)
<template>
<div class="filter-item" :class="`${filter}`" :style="{ backgroundImage : `url(${uploadImage})` }">
<p>
<slot name="a"></slot>
<slot name="b"></slot>
</p>
</div>
</template>
1
2
3
4
5
6
7
8
9
10
11
12
13
(Container.vue)
...
<ul>
<li class="filter-1" v-for="(a,i) in filter" :key="i">
<FilterBox :uploadImage="uploadImage" :filter="a">
<!-- FilterBox 컴포넌트의 slot 자리에 들어갈 데이터 -->
<template v-slot:a>{{ a }}</template>
<template v-slot:b>{{ i }}</template>
</FilterBox>
</li>
</ul>
...
This post is licensed under CC BY 4.0 by the author.