vue2.0父子組件以及非父子組件如何通訊

1.父組件傳遞數據給子組件

父組件數據如何傳遞給子組件呢?能夠經過props屬性來實現vue

父組件:this

<parent>
    <child :child-msg="msg"></child>//這裏必需要用 - 代替駝峯
</parent>

data(){
    return {
        msg: [1,2,3]
    };
}

 

 

子組件經過props來接收數據: 
方式1:spa

props: ['childMsg']

 

 

方式2 :code

props: {
    childMsg: Array //這樣能夠指定傳入的類型,若是類型不對,會警告
}

 

 

方式3:blog

props: {
    childMsg: {
        type: Array,
        default: [0,0,0] //這樣能夠指定默認的值
    }
}

 

這樣呢,就實現了父組件向子組件傳遞數據.事件

2.子組件與父組件通訊

那麼,若是子組件想要改變數據呢?這在vue中是不容許的,由於vue只容許單向數據傳遞,這時候咱們能夠經過觸發事件來通知父組件改變數據,從而達到改變子組件數據的目的.it

子組件:
<template>
    <div @click="up"></div>
</template>

methods: {
    up() {
        this.$emit('upup','hehe'); //主動觸發upup方法,'hehe'爲向父組件傳遞的數據
    }
}

 

 

父組件:event

<div>
    <child @upup="change" :msg="msg"></child> //監聽子組件觸發的upup事件,而後調用change方法
</div>
methods: {
    change(msg) {
        this.msg = msg;
    }
}

 

 

3.非父子組件通訊

若是2個組件不是父子組件那麼如何通訊呢?這時能夠經過eventHub來實現通訊. 
所謂eventHub就是建立一個事件中心,至關於中轉站,能夠用它來傳遞事件和接收事件.class

let Hub = new Vue(); //建立事件中心

 

 

組件1觸發:原理

<div @click="eve"></div>
methods: {
    eve() {
        Hub.$emit('change','hehe'); //Hub觸發事件
    }
}

 

 

組件2接收:

<div></div>
created() {
    Hub.$on('change', () => { //Hub接收事件
        this.msg = 'hehe';
    });
}

 

 

這樣就實現了非父子組件之間的通訊了.原理就是把Hub看成一箇中轉站!

相關文章
相關標籤/搜索