上一篇介紹完如何往內層傳送資料,
看完往內層傳資料,我們再來看看由內層往外層傳送資料。
在Vue中一般來說只有提供向內層傳送資料的功能。
不過因應各種開發情況,我們可能會用到向外傳送資料的情形。
為此我們可能會透過使用 emit
,或是自製 event bus
,甚至使用到vuex
套件....等方式,
讓我們可以從內層向外傳遞資料。
(這邊僅介紹 emit)
emit
,原本是用來提供讓我們自訂觸發事件(Custom Events)的函式。
我們可透過這個函式來幫我們實現子傳父的功能
childComponent2.vue
childComponent2.vue
輸入下方程式碼<template>
<div>
<button @click='ClickEvent'> {{title}} </button>
</div>
</template>
<script>
export default {
name:'childComponent2',
data: function () {
return {
title: "Emit",
count: 0,
}
},
methods: {
ClickEvent:function(){
this.count ++;//count 計數 累加一
this.$emit('childemit',this.count)//觸發 childEmit這個事件,帶參數count
}
},
}
</script>
<style>
</style>
template:
<template>
<img alt="Vue logo" src="./assets/logo.png">
<child2 @childemit='EmitListener'></child2>
</template>
script:
<script>
import childComponent2 from './components/childComponent2'
export default {
name: 'App',
components: {
child2:childComponent2,
},
methods:{
EmitListener:function(data){
alert(data)
}
}
}
</script>
npm run serve
當按下Emit的時候會觸發click事件,然後執行ClckEvent這個function,
並且透過 this.$emit()
連帶觸發childemit這個事件。
當監聽到 childemit這個事件被觸發之後,然後執行EmitListener這個function,
在畫面上跳出警示(alert),顯示data的資料(與childComponent2裡面的count資料相同)
這樣就能達到 子組件 -> 父組件 的資料傳遞。
因為這次運作的流程比較複雜一點,所以做了個程式的流程圖,
希望大家能更容易了解他運作的原理。
我們會在下一篇介紹到這篇所提到 event bus
和 如何達到資料的雙向綁定。