Vue父子組件之間事件通信示例解析
前言
組件間傳值的章節(jié)我們知道父組件給子組件傳值的時候,使用v-bind的方式定義一個屬性傳值,子組件根據(jù)這個屬性名去接收父組件的值,但是假如子組件想給父組件一些反饋呢?就不能使用這種方式來,而是使用事件的方式,父組件通過注冊這個事件的監(jiān)聽來接收子組件的信息,然后做對應(yīng)的操作。
示例解析
在前面的章節(jié)我們使用父組件傳遞過來的值做一個計數(shù)組件的時候,使用v-bind的方式傳值,這個時候父子組件間是單向數(shù)據(jù)流的方式,即子組件無法修改父組件傳來的值,所以做計數(shù)器組件的時候,子組件只能是拷貝一份父組件傳來的值,然后做計數(shù)操作,本章我們提供事件的方式實(shí)現(xiàn)計數(shù)的功能,思想就是,我們修改不了父組件傳遞過來的值,我們就可以通過事件通知父組件修改這個值:代碼如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>父子組件通過事件進(jìn)行通信</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="root"></div>
</body>
<script>
const app = Vue.createApp({
data() {
return {
count:1
}
},
methods:{
handleAddOne(){
this.count += 1;
}
},
template:
`
<div>
<counter :count = "count" @add-one="handleAddOne" />
</div>
`
});
app.component('counter',{
props:['count'],
emits:{
addOne:(count) =>{
if(count > 3){
alert(count);
return true;
}
return false;
}
},
methods: {
handleItemClick(){
this.$emit('addOne',this.count);
}
},
template:`<div @click="handleItemClick">{{count}}</div>`
});
const vm = app.mount('#root');
</script>
</html>當(dāng)我們點(diǎn)擊顯示數(shù)字的div時,會執(zhí)行執(zhí)行handleItemClick方法,向父組件傳遞一個add-one事件,并且將目前的count值當(dāng)成參數(shù)傳遞給父組件,父組件通過@add-one="handleAddOne"監(jiān)聽add-one事件,當(dāng)收到這個事件后,就執(zhí)行handleAddOne方法,讓count的值加一,然后由于時count的值和子組件又是綁定的,所以這個值也會同步給子組件,這樣就會在子組件顯示count+1的值。
注意:監(jiān)聽事件,使用“-” 分隔符:如本例中的:@add-one,向外部發(fā)送一個事件時用駝峰命名:如本例中的:this.$emit('addOne',this.count);
從代碼中我們可以看到從子組件向父組件傳遞一個事件使用的是$emit()方法,這個方法可以單獨(dú)傳事件如:this.$emit('addOne'); 也可以帶參數(shù)傳遞:this.$emit('addOne',2);
另外本例中,我們可以看到這樣一段代碼:
emits:{
addOne:(count) =>{
if(count > 3){
alert(count);
return true;
}
return false;
}
},
其實(shí)這里是便于讓代碼的閱讀者能通過emmits關(guān)鍵字快速知道本組件會向外傳遞哪些事件,畢竟組件多了后,會有一堆事件,在代碼中一個個看的確比較費(fèi)勁,這個模塊還有一個功能就是校驗(yàn)我們可以在里面判斷父組件傳遞過來的值,然后做些想做的操作
總結(jié)
本文主要介紹父組件和子組件之間的通信,父組件可以通過v-bind的方式將值傳遞給子組件,子組件可以使用props:[]接收,然后子組件可以通過事件$emit()通知父組件,自己想做的事情,父組件通過@事件名稱的方式接收子組件的事件,這里需要注意的是,子組件發(fā)送事件時,使用的是駝峰命名,父組件定義監(jiān)聽時使用的是分隔符的方式命名,如此就完成了父子組件的通信。
到此這篇關(guān)于Vue父子組件之間事件通信示例解析的文章就介紹到這了,更多相關(guān)Vue父子組件事件通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue中使用vee-validator完成表單校驗(yàn)方案
vee-validator是一種基于vue模板的輕量級校驗(yàn)框架。本文主要討論的是vee-validator校驗(yàn)方案,感興趣的朋友跟隨小編一起看看吧2019-11-11
使用vue init webpack項(xiàng)目名創(chuàng)建項(xiàng)目方式
這篇文章主要介紹了使用vue init webpack項(xiàng)目名創(chuàng)建項(xiàng)目方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
Vue 封裝防刷新考試倒計時組件的實(shí)現(xiàn)
這篇文章主要介紹了Vue 封裝防刷新考試倒計時組件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
vue通過vue-lazyload實(shí)現(xiàn)圖片懶加載的代碼詳解
這篇文章主要給大家介紹了vue通過vue-lazyload實(shí)現(xiàn)圖片懶加載,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02
SpringBoot實(shí)現(xiàn)全局和局部跨域的兩種方式
本文主要介紹了SpringBoot實(shí)現(xiàn)全局和局部跨域的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
Vue3 SFC 和 TSX 方式自定義組件實(shí)現(xiàn) v-model的詳細(xì)
v-model 是 vue3 中的一個內(nèi)置指令,很多表單元素都可以使用這個屬性,如 input、checkbox 等,咱可以在自定義組件中實(shí)現(xiàn) v-model,這篇文章主要介紹了Vue3 SFC 和 TSX 方式自定義組件實(shí)現(xiàn) v-model,需要的朋友可以參考下2022-10-10

