iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
自我挑戰組

自學vue~點亮Roadmap過程系列 第 13

vue3鍊成術第十三天-Emits(實作)

  • 分享至 

  • xImage
  •  

Emits

除了接收 props,子組件還可以向父組件觸發事件:

<script setup>
// 聲明觸發的事件
const emit = defineEmits(['response'])

// 帶參數觸發
emit('response', 'hello from child')
</script>

emit() 的第一個參數是事件的名稱。其他所有參數都將傳遞給事件監聽器。
父組件可以使用 v-on 監聽子組件觸發的事件

<ChildComp @response="(msg) => childMsg = msg" />

實作

<script setup>
import { ref } from 'vue'
import ChildComp from './ChildComp.vue'

const childMsg = ref('No child msg yet')
</script>

<template>
  <ChildComp />
  <p>{{ childMsg }}</p>
</template>

https://ithelp.ithome.com.tw/upload/images/20240926/20169210c8bM57CfcH.png

完成

<script setup>
import { ref } from 'vue'
import ChildComp from './ChildComp.vue'

const childMsg = ref('No child msg yet')
const emit = defineEmits(['response'])
emit('response','hello from child')
</script>

<template>
  <ChildComp @response="(msg) => childMsg = msg"/>
  <p>{{ childMsg }}</p>
</template>

https://ithelp.ithome.com.tw/upload/images/20240926/20169210b1fJi9zuIs.png

插槽

除了通過 props 傳遞數據外,父組件還可以通過插槽 (slots) 將模板片段傳遞給子組件:

<ChildComp>
  This is some slot content!
</ChildComp>

在子組件中,可以使用 slot 元素作為插槽出口 (slot outlet) 渲染父組件中的插槽內容 (slot content):
slot插口中的內容將被當作“默認”內容:它會在父組件沒有傳遞任何插槽內容時顯示:

<slot>Fallback content</slot>

實作

利用父組件的 msg 狀態為子組件提供一些插槽內容吧。

<script setup>
import { ref } from 'vue'
import ChildComp from './ChildComp.vue'

const msg = ref('from parent')
</script>

<template>
  <ChildComp></ChildComp>
</template>

https://ithelp.ithome.com.tw/upload/images/20240926/20169210HnqDcy1D4g.png

完成

<script setup>
import { ref } from 'vue'
import ChildComp from './ChildComp.vue'

const msg = ref('from parent')
</script>

<template>
  <ChildComp>Message: {{ msg }}</ChildComp>
</template>

https://ithelp.ithome.com.tw/upload/images/20240927/20169210N0hqZP8dq8.png


上一篇
vue3鍊成術第十二天-組件(實作)
下一篇
vue3鍊成術第十四天-Tamplate語法(1)
系列文
自學vue~點亮Roadmap過程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言