# μ€μ½₯λ μ¬λ‘―
μ¬λ‘―(slot)μ΄ μ»΄ν¬λνΈ ν νλ¦Ώμ μ¬μ¬μ©μ±μ λλ €μ£ΌκΈ° μν κΈ°λ₯μ΄λΌλ©΄ μ€μ½₯λ μ¬λ‘―(Scoped slot)μ μ»΄ν¬λνΈ λ°μ΄ν°μ μ¬μ¬μ©μ±μ λμ¬μ£Όλ κΈ°λ₯μ λλ€. μΌλ°μ μΌλ‘ λ·°μμλ νλ‘μ€ μμ±μ΄λ μ΄λ²€νΈ λ°μκ³Ό κ°μ μ»΄ν¬λνΈ ν΅μ λ°©μμ μ μΈνκ³ λ λ€λ₯Έ μ»΄ν¬λνΈμ κ°μ μ°Έμ‘°ν μ μμ΅λλ€. νμ§λ§ μ€μ½₯λ μ¬λ‘―μ νμ μ»΄ν¬λνΈμ κ°μ μμ μ»΄ν¬λνΈμμ μ κ·Όνμ¬ μ¬μ©ν μ μμ΅λλ€.
# μ€μ½₯λ μ¬λ‘― μ½λ νμ
μ€μ½₯λ μ¬λ‘―μ μ¬μ©νκΈ° μν΄μλ κΈ°λ³Έμ μΌλ‘ μμ, νμ 2κ°μ μ»΄ν¬λνΈκ° νμνκ³ κ°κ°μ μ»΄ν¬λνΈμ μλμ κ°μ΄ ꡬνν΄μΌν©λλ€.
<!-- νμ μ»΄ν¬λνΈμ μ¬λ‘― νκ·Έ -->
<slot :μμ μ»΄ν¬λνΈλ‘ μ λ¬ν  μμ± μ΄λ¦="νμ μ»΄ν¬λνΈμ λ°μ΄ν°"></slot>
λ¨Όμ  νμ μ»΄ν¬λνΈμμ <slot> νκ·Έλ₯Ό μ μνκ³  v-bind λλ ν°λΈμ μ½μ λ¬Έλ²μΈ :λ₯Ό μ΄μ©νμ¬ νμ μ»΄ν¬λνΈμ λ°μ΄ν°λ₯Ό μ°κ²°ν©λλ€. μ»΄ν¬λνΈ ν΅μ  λ°©λ²μμ λ°°μ΄ νλ‘μ€ μμ± μ λ¬ λ°©λ²κ³Ό λΉμ·ν νμμ
λλ€.
μ΄μ  μμ μ»΄ν¬λνΈμ μ½λλ₯Ό λ³΄κ² μ΅λλ€.
<!-- μμ μ»΄ν¬λνΈμ λ±λ‘λ νμ μ»΄ν¬λνΈ νκ·Έ λΆλΆ -->
<child-component>
  <template slot-scope="μμμ λ³μ">
    {{ μμμ λ³μ.μμ μ»΄ν¬λνΈλ‘ μ λ¬ν  μμ± μ΄λ¦ }}
  </template>
</child-component>
νμ μ»΄ν¬λνΈμΈ <child-component> νκ·Έμ μ§μ€ν©λλ€. μμμ <slot> νκ·Έλ₯Ό 미리 μ μν΄λ¨κΈ° λλ¬Έμ <child-component> νκ·Έ μ¬μ΄μ λ€μ΄κ°λ μ½λλ λͺ¨λ μ¬λ‘―μΌλ‘ μ²λ¦¬κ° λ©λλ€. μ¬κΈ°μ slot-scopeλΌλ μμ±μΌλ‘ νμ μ»΄ν¬λνΈμμ μ¬λ €λ³΄λ΄μ€ λ°μ΄ν°λ₯Ό μ λ¬λ°μ μ μμ΅λλ€.
TIP
slot-scope μμ±μ΄ μ μλ <template> νκ·Έλ μ€μ  DOMμ΄ μλλΌ μμ±μ μ λ¬λ°κΈ° μν κ»λ°κΈ°μΌ λΏμ
λλ€. μ€μ λ‘ νλ©΄ λ λλ§μ΄ λκ³  λλ©΄ <template> νκ·Έλ κ°μμ μΈ νκ·Έλ‘ λ³νλμ§ μμ΅λλ€.
μμ§ μ μλΏμΌμ€ μ μμΌλ μ€μ  μμ λ₯Ό κ°μ΄ μ΄ν΄λ³΄κ² μ΅λλ€.
# μ€μ½₯λ μ¬λ‘― μ½λ μμ 
μμμ μ΄ν΄λ³Έ μ½λ νμμ μ°Έκ³ νμ¬ κ°λ¨ν μμ λ₯Ό μ μνμμ΅λλ€. μμ μ»΄ν¬λνΈλ App.vueμ΄κ³ νμ μ»΄ν¬λνΈλ ChildComponent.vue μ λλ€.
νμ μ»΄ν¬λνΈμ μ½λλΆν° λ³΄κ² μ΅λλ€.
<!-- ChildComponent.vue -->
<template>
  <div>
    <h1>Child Component</h1>
    <slot :message="message"></slot>
  </div>
</template>
<script>
export default {
  data() {
    return {
      message: 'Hello'
    }
  },
}
</script>
νμ μ»΄ν¬λνΈμ <slot> νκ·Έλ₯Ό μ μνκ³  v-bind λλ ν°λΈ(:)λ₯Ό μ΄μ©νμ¬ message μμ±μ μ λ¬νμμ΅λλ€.
μ΄λ²μ μμ μ»΄ν¬λνΈμ μ½λλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
<!-- App.vue -->
<template>
  <div>
    <child-component>
      <template slot-scope="scopeProps">
        {{ scopeProps.message }}
      </template>
    </child-component>
  </div>
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
  components: {
    ChildComponent
  }
}
</script>
νμ μ»΄ν¬λνΈμΈ <child-component> νκ·Έμ μ¬λ‘― μμμ slot-scope μμ±μ μ μνμμ΅λλ€. μ¬κΈ°μ μ¬μ©ν λ³μ scopePropsλ νμ μ»΄ν¬λνΈμμ μ¬λ €μ€ κ°μ λ°κΈ° μν μμμ λ³μμ
λλ€. μμμ λ³μμ΄κΈ° λλ¬Έμ μνλ λ³μ λͺ
μ μ§μ νμ¬ μ¬μ©ν  μ μμ΅λλ€. scopePropsμλ νμ μ»΄ν¬λνΈμμ μ¬λ €μ€ κ° messageμ΄ λ€μ΄μμ΅λλ€.
μμ μ½λλ₯Ό μ€ννλ©΄ κ²°λ‘ μ μΌλ‘ <h1> μ λͺ© νκ·Έμ ν¨κ» νμ μ»΄ν¬λνΈμ message κ°μΈ Helloκ° νλ©΄μ μΆλ ₯λ©λλ€.
TIP
λ·° λ²μ  2.6μμ μ¬λ‘―μ λ¬Έλ²μ΄ v-slot λλ ν°λΈλ‘ λ°λ μ΄μ λ μ€μ½₯μ€ μ¬λ‘―μ λ³μ μ κ·Ό λ²μ λλ¬Έμ
λλ€.
μΌλ° HTML νκ·Έμμ μ€μ½₯λ μ¬λ‘―μ μ μ©νλ©΄ μ΄ν΄νλλ° ν¬κ² λ¬Έμ κ° μμΌλ μ»΄ν¬λνΈ νκ·Έμ μ€μ½₯λ μ¬λ‘―μ μ μ©νλ κ²½μ° λ³μμ μ κ·Ό λ²μμ λν΄ νΌλμ΄ μμ μ μμ΅λλ€.
λ°λΌμ, κΈ°μ‘΄ λ κ±°μ μ½λμ κ²ΉμΉμ§ μκ² v-slot λ° #μΌλ‘ κ°νΈνμμ΅λλ€.
μμΈν λ΄μ©μ μ¬κΈ° (opens new window)λ₯Ό μ°Έκ³ νμΈμ.