在使用vue的過程中,如果需要進行父子組件間的通信,通過查閱官方文檔
我們可以了解到只需要在子組件要顯式地用 props選項聲明它期待獲得的數據,同時在其使用過程中傳入相應的數據即可,例如:
Vue.component('child', {
// 聲明 props
props: ['message'],
// 就像 data 一樣,prop 可以用在模板內
// 同樣也可以在 vm 實例中像“this.message”這樣使用
template: '<span>{{ message }}</span>'
})
<child message="hello!"></child>
當然,這只是一個簡單的例子,在實際的使用過程中,我們還可以在子組件中聲明傳入數據的類型和默認值,這些不展開講解,查閱官方文檔均可以找到滿意的答案。
在vue中,prop 是單向綁定的:當父組件的屬性變化時,將傳導給子組件,但是不會反過來。這是為了防止子組件無意修改了父組件的狀態——這會讓應用的數據流難以理解。所以如果我們在子組件中想要傳遞給父組件某些信息的話,我們就需要用到另一種方法——vm.$emit
Vue.component('child', {
// 聲明 props
props: ['message'],
// 就像 data 一樣,prop 可以用在模板內
// 同樣也可以在 vm 實例中像“this.message”這樣使用
template: '<span>{{ message }}</span>',
methods: {
triggerEvent() {
// 傳入事件名和需要傳遞的參數
this.$emit('eventName', args)
}
}
})
<child @change="changeEvent" message="hello!"></child>
<!-- 在綁定事件的過程中,changeEvent方法并不需要傳入參數,在之后使用的時候傳入參數即可 -->
以上均為較常見的方法,在官方的文檔中也有比較詳盡的介紹。但是在之前的使用過程中,我需要在父組件中觸發子組件的某個方法,這時候需要怎么做呢?在查閱文檔的過程中并沒有找到行之有效的辦法,之后通過查閱資料發現我們可以通ref為子組件指定一個索引,之后通過索引獲取子組件的事件,例:
<child ref="child" @change="changeEvent" message="hello!"></child>
this.$refs.child.childEventName
// 通過這種方式可以獲取到子組件的方法
(end)