Vue 兄弟組件通信的方法(不使用Vuex)
項(xiàng)目中,我們經(jīng)常會(huì)遇到兄弟組件通信的情況。在大型項(xiàng)目中我們可以通過引入vuex輕松管理各組件之間通信問題,但在一些小型的項(xiàng)目中,我們就沒有必要去引入vuex。下面簡單介紹一下使用傳統(tǒng)方法,實(shí)現(xiàn)父子組件通信的方法。
簡單實(shí)例:我們?cè)赼組件中點(diǎn)擊按鈕,將信息傳給b組件,從而使b組件彈出。

主要的思路就是:先子傳父,在父?jìng)髯?/strong>
首先我們?cè)?a.vue 組件中 ,給按鈕botton綁定一個(gè)handleClick事件,事件中我們通過 this.$emit() 方法去觸發(fā)一個(gè)自定義事件,并傳遞我們的參數(shù)。
示例中我們通過this.$emit() 去觸發(fā)isLogFn 這個(gè)方法自定義事件,并將log 參數(shù)傳遞出去
a.vue
<template>
<div class="adiv">
<p>a組件</p>
<button type="button" v-on:click="handleClick">點(diǎn)擊打開組件b彈窗</button>
</div>
</template>
<script>
export default {
methods: {
handleClick () {
this.$emit('isLogFn','log')
}
}
}
</script>
<style>
.adiv{
width: 400px;
height: 200px;
border: 1px solid #000;
margin: 0 auto;
}
</style>
第二步,我們要在父組件中去監(jiān)聽這個(gè)自定義事件,去觸發(fā)對(duì)應(yīng)的方法,并接受a組件傳過來的參數(shù)。此時(shí)我們就完成了子組件向父組件傳值的過程。
示例中,<aPage @isLogFn = "lisLogFn"></aPage> 監(jiān)聽isLogFn 去觸發(fā)我們?cè)诟附M件中定義的方法lisLogFn,并拿到傳過來的 ‘log' 數(shù)據(jù)。完成子父?jìng)髦怠?/p>
到此,整個(gè)過程還沒有結(jié)束,只是完成了一半。接下來我們要完成父子組件傳值,將a組件的信息在傳給b組件。
在< bPage > 標(biāo)簽中綁定islog 屬性,動(dòng)態(tài)綁定data中的login 字段,在我們通過lisLogFn 方法拿到 ‘data'之后,我們要判斷 data 傳過來的數(shù)據(jù),根據(jù)判斷結(jié)果去改變data()中的數(shù)據(jù),從而將數(shù)據(jù)傳遞給b組件
App.vue
<template>
<div id="app">
<aPage @isLogFn = "lisLogFn"></aPage>
<bPage :isLog = "login"></bPage>
</div>
</template>
<script>
import aPage from './components/a.vue'
import bPage from './components/b.vue'
export default {
data () {
return {
login: 'false'
}
},
name: 'app',
components: {
aPage,
bPage
},
methods: {
lisLogFn (data) {
if (data == 'log') {
this.login = 'true'
}
}
}
}
</script>
<style>
</style>
最后,b組件中需要?jiǎng)?chuàng)建props,定義一個(gè)isLog 屬性,這個(gè)屬性就是我們傳過來的數(shù)值。然后我們?cè)谟?jì)算屬性中處理這個(gè)數(shù)據(jù),最終供b組件使用。示例中,我們?cè)趘-show="isLogin" 中用來控制彈窗是否打開。
切記!不能直接使用這個(gè)props,一定要經(jīng)過computed處理,原因我引用vue官方說明
b.vue
<template>
<div class="bdiv" v-show="isLogin">我是組件B彈窗</div>
</template>
<script>
export default {
props: ['isLog'],
data () {
return {
}
},
computed: {
isLogin () {
if(this.isLog == 'true'){
return true
} else {
return false
}
}
}
}
</script>
<style>
.bdiv{
width: 200px;
height: 200px;
border: 1px #000 solid;
margin: 0 auto;
}
</style>
總結(jié): 想要實(shí)現(xiàn)兄弟組件傳值,一定要首先熟悉子父,父子之間的傳值。
子父:
- 子組件中需要以某種方式例如點(diǎn)擊事件的方法來觸發(fā)一個(gè)自定義事件
- 將需要傳的值作為$emit的第二個(gè)參數(shù),該值將作為實(shí)參傳給響應(yīng)自定義事件的方法
- 在父組件中注冊(cè)子組件并在子組件標(biāo)簽上綁定對(duì)自定義事件的監(jiān)聽
父子:
- 子組件在props中創(chuàng)建一個(gè)屬性,用以接收父組件傳過來的值
- 在子組件標(biāo)簽中添加子組件props中創(chuàng)建的屬性,把需要傳給子組件的值賦給該屬性
文中示例 github 地址:https://github.com/enjoy-pany/vue-emit
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue調(diào)用PC攝像頭實(shí)現(xiàn)拍照功能
這篇文章主要為大家詳細(xì)介紹了Vue調(diào)用PC攝像頭實(shí)現(xiàn)拍照功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Vue+penlayers實(shí)現(xiàn)多邊形繪制及展示
這篇文章主要為大家詳細(xì)介紹了Vue+penlayers實(shí)現(xiàn)多邊形繪制及展示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12
Vue實(shí)現(xiàn)滑動(dòng)拼圖驗(yàn)證碼功能
這篇文章主要介紹了Vue實(shí)現(xiàn)滑動(dòng)拼圖驗(yàn)證碼功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
vue3生命周期原理與生命周期函數(shù)簡單應(yīng)用實(shí)例分析
這篇文章主要介紹了vue3生命周期原理與生命周期函數(shù),結(jié)合簡單實(shí)例形式分析了vue3的生命周期基本原理、以及各個(gè)階段的生命周期鉤子函數(shù)功能、使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2023-04-04
vue隨機(jī)驗(yàn)證碼組件的封裝實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了如何封裝一個(gè)隨機(jī)驗(yàn)證碼的VUE組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
vue項(xiàng)目中圖片懶加載時(shí)出現(xiàn)的問題及解決
這篇文章主要介紹了vue項(xiàng)目中圖片懶加載時(shí)出現(xiàn)的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04

