VUE中如何優(yōu)雅實(shí)現(xiàn)爺孫組件的數(shù)據(jù)通信
在開(kāi)發(fā)的過(guò)程中遇到這么個(gè)場(chǎng)景,我需要在爺組件中請(qǐng)求數(shù)據(jù),請(qǐng)求到的數(shù)據(jù)呢需要在孫組件中使用。
爺孫組件是這樣的:我有一個(gè)根組件index.vue,根組件中有一個(gè)父親組件<Father/>,在父親組件中又有一個(gè)子組件,我們叫他孫組件<Son/>
看到這個(gè)場(chǎng)景,vuex、eventBus是有些大材小用了,然后我就用了props,將數(shù)據(jù)傳遞給<Father/>,又將這個(gè)值通過(guò)props傳給<Son/>。但是這么傳遞似乎又感覺(jué)有些low了,那有沒(méi)有更好的辦法呢?確實(shí)有!那就是$attrs和$listeners。
$attrs和$listeners如何使用呢?
- $attrs是用來(lái)將數(shù)據(jù)從爺組件傳遞給孫組件的。
- $listeners是用來(lái)從孫組件中觸發(fā)爺組件中事件的。
$attrs的使用:
- 在爺組件(index.vue)中,類(lèi)似props傳值,將需要傳遞的值綁定在父組件上。
- 在父組件中,也是類(lèi)似props傳值,但是這里傳遞的就不是值了,而是$attrs。
- 在孫組件中,接收props,這樣就可以在孫組件中使用這個(gè)數(shù)據(jù)了。
(需要注意的是父組件中不需要接收props,只要在孫組件中接收就可以。)
然后上代碼:
//index.vue:
<Father :homeInfo="homeInfo"/>
//Father.vue:
<Son v-bind="$attrs"/>
//son.vue:
<template>
<div class="home">
{{homeInfo.name}}
</div>
</template>
<script>
export default {
name: "Son",
data() {
return {};
},
props: {
homeInfo: {
default: Object,
default: () => {},
},
},
};
</script>$listeners的使用:
- 在爺組件(index.vue)中,綁定事件。
- 在父組件中,也是類(lèi)似綁定事件,但是這里綁定的不是具體的事件,而是v-on="$listeners"。
- 在孫組件中,需要的時(shí)候觸發(fā)($emit)這個(gè)事件即可。
然后上代碼:
//index.vue:
<Father :homeInfo="homeInfo" @update="update"/>
//Father.vue:
<Son v-bind="$attrs" v-on="$listeners"/>
//son.vue:
<template>
<div class="home" @click="update">
{{homeInfo.name}}
</div>
</template>
<script>
export default {
name: "Son",
data() {
return {};
},
props: {
homeInfo: {
default: Object,
default: () => {},
},
},
methods: {
update() {
const newHome = {
name: 'new'
}
this.$emit("update", newHome)
}
}
};
</script>總結(jié):
其實(shí)$attrs和$listeners相當(dāng)于是一個(gè)中轉(zhuǎn),主要用在父親組件上。爺組件和孫組件保持以前的使用即可!
到此這篇關(guān)于VUE中如何優(yōu)雅實(shí)現(xiàn)爺孫組件數(shù)據(jù)通信的文章就介紹到這了,更多相關(guān)VUE爺孫組件數(shù)據(jù)通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于vue3默認(rèn)把所有onSomething當(dāng)作v-on事件綁定的思考
這篇文章主要介紹了關(guān)于vue3默認(rèn)把所有`onSomething`當(dāng)作`v-on`事件綁定的思考,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
vue2模擬vue-element-admin手寫(xiě)角色權(quán)限的實(shí)現(xiàn)
本文主要介紹了vue2模擬vue-element-admin手寫(xiě)角色權(quán)限的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
vue實(shí)現(xiàn)動(dòng)態(tài)控制表格列的顯示隱藏
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)動(dòng)態(tài)控制表格列的顯示隱藏,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
vue 組件的封裝之基于axios的ajax請(qǐng)求方法
今天小編就為大家分享一篇vue 組件的封裝之基于axios的ajax請(qǐng)求方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
淺談vue使用axios的回調(diào)函數(shù)中this不指向vue實(shí)例,為undefined
這篇文章主要介紹了淺談vue使用axios的回調(diào)函數(shù)中this不指向vue實(shí)例,為undefined,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
Vue解析剪切板圖片并實(shí)現(xiàn)發(fā)送功能
這篇文章主要介紹了Vue解析剪切板圖片并實(shí)現(xiàn)發(fā)送功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
vue離開(kāi)頁(yè)面時(shí)如何銷(xiāo)毀定時(shí)器
這篇文章主要介紹了vue離開(kāi)頁(yè)面時(shí)如何銷(xiāo)毀定時(shí)器,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05

