VUE中如何優(yōu)雅實現(xiàn)爺孫組件的數(shù)據(jù)通信
在開發(fā)的過程中遇到這么個場景,我需要在爺組件中請求數(shù)據(jù),請求到的數(shù)據(jù)呢需要在孫組件中使用。
爺孫組件是這樣的:我有一個根組件index.vue,根組件中有一個父親組件<Father/>,在父親組件中又有一個子組件,我們叫他孫組件<Son/>
看到這個場景,vuex、eventBus是有些大材小用了,然后我就用了props,將數(shù)據(jù)傳遞給<Father/>,又將這個值通過props傳給<Son/>。但是這么傳遞似乎又感覺有些low了,那有沒有更好的辦法呢?確實有!那就是$attrs和$listeners。
$attrs和$listeners如何使用呢?
- $attrs是用來將數(shù)據(jù)從爺組件傳遞給孫組件的。
- $listeners是用來從孫組件中觸發(fā)爺組件中事件的。
$attrs的使用:
- 在爺組件(index.vue)中,類似props傳值,將需要傳遞的值綁定在父組件上。
- 在父組件中,也是類似props傳值,但是這里傳遞的就不是值了,而是$attrs。
- 在孫組件中,接收props,這樣就可以在孫組件中使用這個數(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)中,綁定事件。
- 在父組件中,也是類似綁定事件,但是這里綁定的不是具體的事件,而是v-on="$listeners"。
- 在孫組件中,需要的時候觸發(fā)($emit)這個事件即可。
然后上代碼:
//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é):
其實$attrs和$listeners相當于是一個中轉(zhuǎn),主要用在父親組件上。爺組件和孫組件保持以前的使用即可!
到此這篇關于VUE中如何優(yōu)雅實現(xiàn)爺孫組件數(shù)據(jù)通信的文章就介紹到這了,更多相關VUE爺孫組件數(shù)據(jù)通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Vue3配置路由ERROR in [eslint]報錯問題及解決
這篇文章主要介紹了Vue3配置路由ERROR in [eslint]報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10
基于Vue中使用節(jié)流Lodash throttle詳解
今天小編就為大家分享一篇基于Vue中使用節(jié)流Lodash throttle詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10
Vue3使用路由及配置vite.alias簡化導入寫法的過程詳解
這篇文章主要介紹了Vue3使用路由及配置vite.alias簡化導入寫法,本文通過實例代碼給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-11-11
Vue 2閱讀理解之initRender與callHook組件詳解
這篇文章主要為大家介紹了Vue 2閱讀理解之initRender與callHook組件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08

