父組件數據如何傳遞給子組件呢?能夠經過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] //這樣能夠指定默認的值 } }
這樣呢,就實現了父組件向子組件傳遞數據.事件
那麼,若是子組件想要改變數據呢?這在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; } }
若是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看成一箇中轉站!