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),主要用在父親組件上。爺組件和孫組件保持以前的使用即可!
到此這篇關(guān)于VUE中如何優(yōu)雅實現(xiàn)爺孫組件數(shù)據(jù)通信的文章就介紹到這了,更多相關(guān)VUE爺孫組件數(shù)據(jù)通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于vue3默認把所有onSomething當作v-on事件綁定的思考
這篇文章主要介紹了關(guān)于vue3默認把所有`onSomething`當作`v-on`事件綁定的思考,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05vue2模擬vue-element-admin手寫角色權(quán)限的實現(xiàn)
本文主要介紹了vue2模擬vue-element-admin手寫角色權(quán)限的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07淺談vue使用axios的回調(diào)函數(shù)中this不指向vue實例,為undefined
這篇文章主要介紹了淺談vue使用axios的回調(diào)函數(shù)中this不指向vue實例,為undefined,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09