在Vue中,一個組件可以向它的父級組件發送一個自定義事件。通過使用$emit()方法,子組件可以將一個事件掛載到當前實例上,將想要傳遞的數據作為第二個參數放在方法中。
Vue.component('child-component', { methods: { sendMessage: function () { this.$emit('onChildMessage', 'Hello from child component'); } } });
在這個例子中,我們創建一個名為child-component的組件,并且在sendMessage方法中使用$emit來向父級組件發送一個名為onChildMessage的事件,同時傳遞一個字符串作為數據。
現在我們來看看父級組件如何監聽onChildMessage事件:
Vue.component('parent-component', { template: '', methods: { receiveMessage: function (msg) { console.log(msg); } }, mounted: function () { this.$on('onChildMessage', this.receiveMessage); }, destroyed: function () { this.$off('onChildMessage', this.receiveMessage); } });
在parent-component組件中,我們定義了一個receiveMessage方法,用來處理接收到的消息。在組件被掛載后,我們使用$on方法來監聽onChildMessage事件,并將接收到的消息傳遞給receiveMessage方法進行處理。當組件被銷毀時,我們使用$off方法來取消監聽。
$emit不僅可以將數據傳遞給父級組件,還可以將數據傳遞給兄弟組件。下面我們來看一個例子:
Vue.component('parent-component', { template: '', methods: { sendMessage: function () { this.$emit('onParentMessage', 'Hello from parent component'); } }, mounted: function () { this.$on('onChildMessage', function (msg) { console.log(msg); }); } }); Vue.component('child-component', { template: '', methods: { sendMessage: function () { this.$emit('onChildMessage', 'Hello from child component'); } }, mounted: function () { this.$on('onParentMessage', function (msg) { console.log(msg); }); } });
在這個例子中,我們有兩個組件parent-component和child-component。我們在parent-component組件中定義了一個sendMessage方法,并在其中使用$emit方法向兄弟組件child-component發送一個名為onChildMessage的事件,并將一條消息作為數據進行傳遞。
在child-component組件中,我們也定義了一個sendMessage方法,并向父級組件發送一個名為onParentMessage的事件,并同樣將一條消息作為數據進行傳遞。同時,我們也監聽了父級組件發送的onParentMessage事件,并打印出傳遞過來的消息。
通過以上例子,我們可以看到使用$emit方法可以方便地實現組件間的通信,不管是父子組件還是兄弟組件都可以通過$emit方法發送和接收事件和數據。