在使用vue的過程中赋秀,如果需要進(jìn)行父子組件間的通信般眉,通過查閱官方文檔
我們可以了解到只需要在子組件要顯式地用 props選項(xiàng)聲明它期待獲得的數(shù)據(jù)吨娜,同時在其使用過程中傳入相應(yīng)的數(shù)據(jù)即可问拘,例如:
Vue.component('child', {
// 聲明 props
props: ['message'],
// 就像 data 一樣巷折,prop 可以用在模板內(nèi)
// 同樣也可以在 vm 實(shí)例中像“this.message”這樣使用
template: '<span>{{ message }}</span>'
})
<child message="hello!"></child>
當(dāng)然压鉴,這只是一個簡單的例子,在實(shí)際的使用過程中锻拘,我們還可以在子組件中聲明傳入數(shù)據(jù)的類型和默認(rèn)值油吭,這些不展開講解,查閱官方文檔均可以找到滿意的答案署拟。
在vue中上鞠,prop 是單向綁定的:當(dāng)父組件的屬性變化時,將傳導(dǎo)給子組件芯丧,但是不會反過來芍阎。這是為了防止子組件無意修改了父組件的狀態(tài)——這會讓應(yīng)用的數(shù)據(jù)流難以理解。所以如果我們在子組件中想要傳遞給父組件某些信息的話缨恒,我們就需要用到另一種方法——vm.$emit
Vue.component('child', {
// 聲明 props
props: ['message'],
// 就像 data 一樣谴咸,prop 可以用在模板內(nèi)
// 同樣也可以在 vm 實(shí)例中像“this.message”這樣使用
template: '<span>{{ message }}</span>',
methods: {
triggerEvent() {
// 傳入事件名和需要傳遞的參數(shù)
this.$emit('eventName', args)
}
}
})
<child @change="changeEvent" message="hello!"></child>
<!-- 在綁定事件的過程中,changeEvent方法并不需要傳入?yún)?shù)骗露,在之后使用的時候傳入?yún)?shù)即可 -->
以上均為較常見的方法岭佳,在官方的文檔中也有比較詳盡的介紹。但是在之前的使用過程中萧锉,我需要在父組件中觸發(fā)子組件的某個方法珊随,這時候需要怎么做呢?在查閱文檔的過程中并沒有找到行之有效的辦法柿隙,之后通過查閱資料發(fā)現(xiàn)我們可以通ref為子組件指定一個索引叶洞,之后通過索引獲取子組件的事件,例:
<child ref="child" @change="changeEvent" message="hello!"></child>
this.$refs.child.childEventName
// 通過這種方式可以獲取到子組件的方法
(end)