vue2.0父子組件以及非父子組件如何通信
阿新 • • 發佈:2017-06-24
tty rep create pla eve 16px markup div ont
1.父組件 >>> 子組件
父組件數據如何傳遞給子組件呢?可以通過props屬性來實現
父組件:
<parent>
<child :child-msg="msg"></child> //這裏必須要用 - 代替駝峰
</parent>
data(){
return {
msg: [1,2,3]
};
}
子組件通過props來接收數據:
方式1:
props: [‘childMsg‘]
方式2 :
props: {
childMsg: Array //這樣可以指定傳入的類型,如果類型不對,會警告
}
方式3:
props: {
childMsg: {
type: Array,
default: [0,0,0] //這樣可以指定默認的值
}
}
這樣呢,就實現了父組件向子組件傳遞數據.
2.子組件 >>> 父組件通信
那麽,如果子組件想要改變數據呢?這在vue中是不允許的,因為vue只允許單向數據傳遞,這時候我們可以通過觸發事件來通知父組件改變數據,從而達到改變子組件數據的目的.
子組件:
<template>
<div @click="up"></div>
</template>
methods: {
up() {
this.$emit( ‘upup‘,‘hehe‘); //主動觸發upup方法,‘hehe‘為向父組件傳遞的數據
}
}
父組件:
<div>
<child @upup="change" :msg="msg"></child> //監聽子組件觸發的upup事件,然後調用change方法
</div>
methods: {
change(msg) {
this.msg = msg;
}
}
3.非父子組件通信
如果2個組件不是父子組件那麽如何通信呢?這時可以通過eventHub來實現通信.
所謂eventHub就是創建一個事件中心,相當於中轉站,可以用它來傳遞事件和接收事件.
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當作一個中轉站!
vue2.0父子組件以及非父子組件如何通信