iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0
Vue.js

Vue.js 新手入門之路系列 第 23

Vue.js 新手入門之路 - slot

  • 分享至 

  • xImage
  •  

今天要來學習有關 slot 的用法,slot 就是子元件模板裡的內容擺放位,而內容則由父元件提供,子元件只負責外框與樣式
eg.

<template>
  <button class="fancy-btn">
    <slot>(預設文字)</slot> <!-- 會丟來這邊 -->
  </button>
</template>

<style scoped>
.fancy-btn { padding: 8px 12px; border-radius: 8px; }
</style>
<script setup>
import FancyButton from './components/slot.vue'
</script>

<template>
  <FancyButton>Click me!</FancyButton>

  <FancyButton>
    <span style="color:red">Delete</span>
  </FancyButton>

  <FancyButton />
</template>

元件可以傳入一般的文字,也可傳元件(元素),若不傳入則會顯示子元件本身的預設文字
https://ithelp.ithome.com.tw/upload/images/20250912/20178296FOW1Y3gp3G.png

slot 的作用域

slot內容用的是父元件的作用域,無法存取子元件的 data
eg.
子元件:

<script setup>
import { ref } from 'vue';
const message = ref('son')
</script>

<template>
  <button class="fancy-btn">
    <slot>{{message}}</slot>
  </button>
</template>


<style scoped>
.fancy-btn { padding: 8px 12px; border-radius: 8px; }
</style>

父元件:

<script setup>
import { ref } from 'vue'
import FancyButton from './components/slot.vue'
const message = ref('father')
</script>

<template>
  <FancyButton>{{ message }}</FancyButton>
</template>

結果顯示
https://ithelp.ithome.com.tw/upload/images/20250912/20178296nSiFjthcxm.png

具名的 slot

我們可以在子元件使用 name="插槽名字" 來為插槽命名,接著父元件使用 v-slot:插槽名字 來識別插槽以傳入所需元素,v-slot 也可簡寫為 #插槽名字 會更加方便
子元件:

<template>
  <div class="desk">
    <div><slot name="computer">empty</slot></div>
    <div><slot name="keyboard">empty</slot></div>
    <div><slot name="mouse">empty</slot></div>
  </div>
</template>

父元件:

<script setup>
import Desk from './components/slot.vue'
</script>

<template>
  <Desk>
    <template v-slot:computer>white computer</template>
    <template #keyboard>pink keyboard</template>
    <template #mouse>pink mouse</template>
  </Desk>
</template>

https://ithelp.ithome.com.tw/upload/images/20250912/201782964ucSpP6Fqh.png

ref:
https://ithelp.ithome.com.tw/articles/10273298
https://zh-hk.vuejs.org/guide/components/slots.html


上一篇
Vue.js 新手入門之路 - fallthrough(二)
下一篇
Vue.js 新手入門之路 - slot (二)
系列文
Vue.js 新手入門之路25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言