slot 사용시 부모템플릿에서 자식컴포넌트의 매개변수 관리하기

슬롯


아래와 같은 상황에 사용가능하다

- (부모템플릿 ← 자식컴포넌트1 ← 자식컴포넌트2)와 같은 경우에 사용가능하다

- 부모템플릿에서 자식컴포넌트1에서 자식컴포넌트2로 매개변수를 전달하는걸 관리가능하다


예제1

- 기본예제

* 부모템플릿
<자식컴포넌트>
    <template #default="slotProps"> // v-slot="slotProps" 
    {{ slotProps}} // { "index": '1', "test": "aaa"}
    </template>
</자식컴포넌트>

* 자식컴포넌트
let i = '1'
<div>
    <slot :index="i" test="aaa" />
</div>


예제2

- 이름이 있는 슬롯사용

- 구조분해할당사용

* 부모템플릿
<자식컴포넌트>
    <template #header="headerProps"> // slot name="header"의 props가 전달된다
        {{ slotProps}} // { "index": '1', "test": "aaa"}
    </template>
    <template #default="{index,test}"> // 구조분해할당형식으로 표현가능
        {{ index }} // '1'
    </template>
     <p>{{ message }}</p>
</자식컴포넌트>

* 자식컴포넌트
let i = '1'
<div>
    <slot name="header" message="안녕"></slot>
    <slot :index="i" test="aaa" />
</div>


실제사용예제3

- 부모 템플릿에서 자식컴포넌트의 props값 item을 관리할수있다

* 부모템플릿
<자식컴포넌트 :api-url="url" :per-page="10">
  <template #item="{ body, username, likes }">
    <div class="item">
      <p>{{ body }}</p>
      <p>by {{ username }} | {{ likes }} likes</p>
    </div>
  </template>
</자식컴포넌트>

* 자식컴포넌트
<ul>
  <li v-for="item in items">
    <slot name="item" v-bind="item"></slot>
  </li>
</ul>




참고

범위가 지정된 슬롯

May 18, 2024 Views 81