父子組件資料傳遞 props、emit

閱讀時間約 5 分鐘

當 父組件 有數據想傳送到 子組件 就可以使用props

1​. 父層傳遞設置

可以在父組件的屬性給予一個值,當作要傳送到子組件的資料。

<!-- App.vue (父組件) -->
<template>
<div>
<ChildComponent greeting="Hello" name="MAY" />
</div>
</template>

<script setup>
import ChildComponent from './ChildComponent.vue';
</script>

在 屬性上的props名稱命名規則,須使用kebab-case(烤肉串),不可以使用camelCase(駱峰)。

2.子層接收數據

子組件可以宣告props來接收來自父組件的數據,指定數據名稱必須要使用 camelCase (駱峰)來設置接收。

可以通過在子組件中使用 defineProps 來接收父組件傳遞的 props。

<!-- ChildComponent.vue (子組件) -->
<template>
<div>
<p>{{ greeting }}, {{ name }}!</p>
</div>
</template>

<script setup>
import { defineProps } from 'vue';

const props = defineProps({
greeting: String,
name: String
});
</script>

它被包含在父組件 App.vue 中。它接收來自父組件的 greetingname 兩個 props,並在模板中使用它們。


那如果今天當你需要在子組件中觸發一個事件並將數據傳遞給父組件時,你可以使用 emit

<!-- ChildComponent.vue (子組件) -->
<template>
<button @click="handleClick">Click me!</button>
</template>

<script setup>
import { defineEmits } from 'vue';

const emits = defineEmits(['button-click']);

const handleClick = () => { emits('button-click', 'Some data from child'); }

</script>

在子組件中有點擊事件會觸發 handleClick 方法。在這個方法中,我們使用 emits 來觸發一個名為 button-click 的事件,同時將一些數據 'Some data from child' 作為參數傳遞。

<!-- App.vue (父組件) -->
<template>
<div>
<ChildComponent @button-click="handleButtonClick" />
<p>{{ message }}</p>
</div>
</template>

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

const message = ref('');

const handleButtonClick = (data) => { message.value = data; }

</script>

在父組件 App.vue 中,我們使用 ChildComponent 並監聽子組件觸發的 button-click 事件。當事件被觸發時,handleButtonClick 方法會被調用並接收從子組件傳遞過來的數據。在這個例子中,我們將這個數據賦值給 message 變量,並在模板中渲染出來。這樣子組件就可以通過 emit 將數據傳遞給父組件。

參考資料 :

父子組件資料傳遞 props、$emit | Docs99 (docs-99.vercel.app)


    avatar-img
    3會員
    17內容數
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    郭欣玫的沙龍 的其他內容
    CSS Box Model 是在 CSS 裡面,html 的每個元素都可被視作為一個盒子,然後可以針對這個盒子去做調整,看以下圖片: 簡單來說margin就是一個是外邊距,與外層元素的間距 Margin 用於控制元素與其周邊元素的間隔,可以設定為正數(增加與其他元素的距離)、負數(減少與其他
    今天來介紹一下比較常用的4種定位方式 其中讓我最搞混的是relative跟absolute position: relative 還未定top, bottom, left, right 的屬性時,預設會套用position:static,但如果你去設定了top, bottom, left, ri
    CSS Box Model 是在 CSS 裡面,html 的每個元素都可被視作為一個盒子,然後可以針對這個盒子去做調整,看以下圖片: 簡單來說margin就是一個是外邊距,與外層元素的間距 Margin 用於控制元素與其周邊元素的間隔,可以設定為正數(增加與其他元素的距離)、負數(減少與其他
    今天來介紹一下比較常用的4種定位方式 其中讓我最搞混的是relative跟absolute position: relative 還未定top, bottom, left, right 的屬性時,預設會套用position:static,但如果你去設定了top, bottom, left, ri
    你可能也想看
    Google News 追蹤
    Thumbnail
    各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
    Thumbnail
    我們在實作中,難免會遇到在不同組件中,卻有需求相同的資料格式,因此 mixins 可以達到我們的需求,除了 data 以外也包含了 methods 可以共用,舉例來說,學生資料可能會在,班級跟社團內被使用,當我們要撰寫元件時,就可以省略多餘的 data 定義。
    Thumbnail
    VUE為單向資料流的框架,在鄰近層級之間我們可以依靠 props 由父層向子層來傳遞需要的資料,然而遇到跨層級的架構時,雖然也是可以一層層傳進去,只是這會造成多餘的處理及凌亂的程式碼,因此才有了 "provide" 來解決我們跨層級的需求。 層級展示圖
    Thumbnail
    自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
    Thumbnail
    2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
    Thumbnail
    這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
    Thumbnail
    這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot插槽 ,其中包含默認、具名、語法糖。
    Thumbnail
    組件之間的通信是 Vue 應用開發中的一個重要方面。Vue 提供了一種名為事件發射(emit)的機制,讓子組件能夠向父組件發送消息。本文將介紹 Vue 中的事件發射(emit)機制,並通過實際範例演示其用法。
    Thumbnail
    在 Vue 中,組件是構建應用程式的基本單位,而 props 是組件間傳遞資料的主要方式之一,本文將介紹 Vue 中的 props,並通過實際範例展示如何使用 props 實現組件間的資料傳遞。
    上一篇文章提到有些介面不應被繼承,但物件導向的子類別只能繼承父類別的介面,因而產生一些不合適的介面實作。trait/typeclass則沒有這種繼承機制,這似乎使需要繼承的特性無法直接使用。然而函數式導向比起繼承,更適合使用組合,根本不需要使用繼承疊加特性。 資料類型的定義往往跟怎麼建構模型相
    Thumbnail
    各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
    Thumbnail
    我們在實作中,難免會遇到在不同組件中,卻有需求相同的資料格式,因此 mixins 可以達到我們的需求,除了 data 以外也包含了 methods 可以共用,舉例來說,學生資料可能會在,班級跟社團內被使用,當我們要撰寫元件時,就可以省略多餘的 data 定義。
    Thumbnail
    VUE為單向資料流的框架,在鄰近層級之間我們可以依靠 props 由父層向子層來傳遞需要的資料,然而遇到跨層級的架構時,雖然也是可以一層層傳進去,只是這會造成多餘的處理及凌亂的程式碼,因此才有了 "provide" 來解決我們跨層級的需求。 層級展示圖
    Thumbnail
    自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
    Thumbnail
    2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
    Thumbnail
    這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
    Thumbnail
    這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot插槽 ,其中包含默認、具名、語法糖。
    Thumbnail
    組件之間的通信是 Vue 應用開發中的一個重要方面。Vue 提供了一種名為事件發射(emit)的機制,讓子組件能夠向父組件發送消息。本文將介紹 Vue 中的事件發射(emit)機制,並通過實際範例演示其用法。
    Thumbnail
    在 Vue 中,組件是構建應用程式的基本單位,而 props 是組件間傳遞資料的主要方式之一,本文將介紹 Vue 中的 props,並通過實際範例展示如何使用 props 實現組件間的資料傳遞。
    上一篇文章提到有些介面不應被繼承,但物件導向的子類別只能繼承父類別的介面,因而產生一些不合適的介面實作。trait/typeclass則沒有這種繼承機制,這似乎使需要繼承的特性無法直接使用。然而函數式導向比起繼承,更適合使用組合,根本不需要使用繼承疊加特性。 資料類型的定義往往跟怎麼建構模型相