1. 程式人生 > >組件之間的通訊:兄弟組件之間的相互通訊(中央事件總線)

組件之間的通訊:兄弟組件之間的相互通訊(中央事件總線)

temp logs created str 總線 復雜 log 做的 ted

技術分享

組件之間的通訊:

父->子:通過props,data屬性

子->父:通過派發事件

兄弟組件:中央事件總線(......data{ Bus:new Vue()}.....)

更為復雜的通訊:就是用vuex

關於兄弟組件之間的通訊官檔上推薦使用中央事件總線,我們也確實是這樣做的,

中央事件總線,其實就是在父組件data中在實例化話一個vue實例,用於管理組件之間的通訊

假設我們有一個組件A,和B,他們之間的要進行數據通訊,那麽他們之間肯定要建立某種聯系,這個聯系人就是父組件,聯系地址就是中央事件總線

然後A,$emit一個信息,B就$on監聽這個信息

直接上上例子:

首先先建立一個父組件:

    const myVue=new Vue({
        el:#app,
        data:{
            Bus:new Vue(),//中央事件總線
        },
        components:{
            myF1:c1,//子組件c1
            myF2:c2//子組件c2
        }
    });

給出子組件的代碼:

    const c1={
        template:`<div>
            <p>this is c1 組件</p>
            <span></span>
            </div>`,
        created(){//組件的鉤子函數
          
this.$root.Bus.$on(‘你的名字,value=>{ this.add(value); }); }, methods:{ add(value){ console.log(value+100); } }, beforeDestory(){//組件的鉤子函數 this.$root.Bus.$off("你的名字"); } }; const c2={ template:`
<div> <p>this is c2 組件</p> <p > <button @click="submit">改變</button> </p> <span></span> </div>`, methods:{ submit(){ // this.$root.Bus.$emit(‘eventName‘,123); this.$parent.Bus.$emit(‘你的名字,123); }, }, };

組件B,,通過父組件的中央事件總線,$emit派發一個事件"你的名字",以及傳遞一個參數,兄弟組件A,通過父組件的中央事件總線$on,監聽那個派發的事件,並接受那個參數。

沒任何問題。。。。。。

給出代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>非父子組件之間的通信(中央事件總線)</title>
    <script src="../lib/vue.js"></script>
</head>
<body>
    <div id="app">

        <my-f1></my-f1>
        <my-f2></my-f2>
    </div>
</body>
</html>
<script>
    const c1={
        template:`<div>
            <p>this is c1 組件</p>
            <span></span>
            </div>`,
        created(){
          this.$root.Bus.$on(你的名字,value=>{
              this.print(value);
          });
        },
        methods:{
            print(value){
                console.log(value);
            }
        },
        beforeDestory(){
            this.$root.Bus.$off("你的名字");
        }
    };

    const c2={
        template:`
            <div>
             <p>this is c2 組件</p>
             <p >
                <button @click="submit">改變</button>
            </p>
             <span></span>
           </div>`,
        methods:{
            submit(){
              //  this.$root.Bus.$emit(‘eventName‘,123);
                this.$parent.Bus.$emit(你的名字,123);
            },
        },
    };
    const myVue=new Vue({
        el:#app,
        data:{
            Bus:new Vue(),
        },
        components:{
            myF1:c1,
            myF2:c2
        }
    });
</script>

組件之間的通訊:兄弟組件之間的相互通訊(中央事件總線)