Vue 組件通信——兄弟組件

一、通過EventBus進(jìn)行兄弟間組件通訊

1.通過 import 引入vue公共實(shí)例

1)在main.js文件中定義一個(gè)新的eventBus對象,其實(shí)他是一個(gè)全新的Vue實(shí)例:

export const eventBus = new Vue();

2)兄弟組件A.vue

import { eventBus } from '@/main'

  //監(jiān)聽事件
  created() {
    eventBus.$on('showMenus', (arg) => {
      console.log('123'+arg);
      alert(arg);
    })
  },

3)兄弟組件B.vue

import { eventBus } from '@/main'

//分發(fā)事件傳值
 methods: {
  switchmenu:function(flag){
    eventBus.$emit('showMenus',flag); //觸發(fā)事件
    }
  }

2.通過 window傳遞vue公共實(shí)例

1)在main.js文件中實(shí)例化一個(gè)Vue對象,并把它賦值于window.eventBus,這樣eventBus就可以在任何組件中使用:

window.eventBus = new Vue();

2)兄弟組件A.vue

  //監(jiān)聽事件
export default {
  created() {
    eventBus.$on('showMenus', (arg) => {
      console.log('123'+arg);
      alert(arg);
    })
  }
}

3)兄弟組件B.vue

export default {
//分發(fā)事件傳值
 methods: {
  switchmenu:function(flag){
    eventBus.$emit('showMenus',flag); //觸發(fā)事件
    }
  }
}

二、通過父級組件進(jìn)行兄弟間組件通訊

1.父組件:

<!-- ParentCard.vue -->
<template>
    <div class="card">

        <div class="card-body">
            <brother-card :messageSon="messageson" 
              @brotherSaid="messageDaughter($event)"></brother-card>
            <sister-card :messageDaughter="messagedaughter" 
              @sisterSaid="messageSon($event)"></sister-card>
        </div>
    </div>
</template>
 
<script>
    import BrotherCard from './BrotherCard';
    import SisterCard from './SisterCard'
 
    export default {
        name: 'ParentCard',
        data: () => ({
            theCardTitle: '父組件',
            messagedaughter:'', 
            messageson:''
        }),
        components: {
            BrotherCard,
            SisterCard
        },
        methods: {
            messageDaughter(message) {
                this.messagedaughter = message;
            },
            messageSon(message) {
                this.messageson = message;
            },
            stopFighting() {
                if (this.messagedaughter && this.messageson) {
                    return true
                }
                return false
            },
            momSaidChill() {
                this.messagedaughter = '',
                this.messageson = ''
            }
        }
    };
</script>

2.哥哥組件

<!-- BrotherCard.vue -->
<template>
    <div class="message">
        <div class="message-header">
            <h5 v-text="theCardTitle"></h5>
        </div>
        <div class="message-body">
            <p class="message-text">我是Brother組件</p>
            <button @click="messageSister" class="btn">給妹妹發(fā)消息</button>
 
            <div v-if="messageSon" class="alert" v-html="messageSon"></div>
        </div>
    </div>
</template>
 
<script>
    export default {
        name: 'BrotherCard',
        props: ['messageSon'],
        data: () => ({
            theCardTitle: '子組件1'
        }),
        methods: {
            messageSister() {
                this.$emit('brotherSaid', '媽媽說,該做作業(yè)了!(^_^)!!!')
            }
        }
    }
</script>

3.妹妹組件

<!-- SisterCard.vue -->
<template>
    <div class="message">
        <div class="message-header">
            <h5 v-text="theCardTitle"></h5>
        </div>
        <div class="message-body">
            <p class="message-text">我是Sister組件</p>
            <button @click="messageBrother" class="btn">給哥哥發(fā)消息</button>
            <div v-if="messageDaughter" class="alert" v-html="messageDaughter"></div>
        </div>
    </div>
</template>
 
<script>
    export default {
        name: 'SisterCard',
        props: ['messageDaughter'],
        data: () => ({
            theCardTitle: '子組件2'
        }),
        methods: {
            messageBrother() {
                this.$emit('sisterSaid', '媽媽說,該做作業(yè)了!(^_^)!!!')
            }
        }
    }
</script>

總結(jié):


參考資料:Vue組件通訊:https://www.w3cplus.com/vue/component-communication.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容