在Vue中,使用this.$emit來向父組件發送事件,然而如何向子組件發送事件呢?這時候,就可以使用this.$dispatch來向子組件發送事件。
首先,在父組件中,需要引入子組件并將其注冊。
import ChildComponent from './ChildComponent.vue' export default { components: { ChildComponent } }
然后,在父組件中觸發事件并向子組件發送數據。
export default { methods: { sendToChild() { this.$dispatch('eventName', data) } } }
在子組件中,需要先在created生命周期函數中調用$on來監聽事件,并使用箭頭函數綁定this。
export default { created() { this.$on('eventName', (data) =>{ // Do something with data }) } }
然后,在子組件中便可以接收到來自父組件的事件和數據。
需要注意的是,$dispatch方法只會向其直接的子組件發送事件,而不會向更深層次的子組件發送。
如果想要向更深層次的子組件發送事件,可以使用$broadcast方法。
$broadcast方法與$dispatch方法類似,只不過是向所有子組件發送事件。
export default { created() { this.$on('eventName', (data) =>{ // Do something with data }) } }
最后,需要注意的是,$dispatch和$broadcast方法在Vue2.x版本中已經廢棄,取而代之的是$emit和$children/$parent方法。
使用$emit方法可以向父組件和子組件發送事件,而使用$children/$parent方法則可以獲取子組件和父組件的實例。
// 向父組件發送事件 this.$parent.$emit('eventName', data) // 向子組件發送事件 this.$children[index].$emit('eventName', data) // 獲取父組件實例 const parentInstance = this.$parent // 獲取子組件實例 const childInstance = this.$children[index]