Vue中的事件(event)系統(tǒng)是用來協(xié)調(diào)組件之間通信的重要機制。 - 組件之間通信 當我們使用多個組件時,經(jīng)常需要在它們之間進行通信。Vue中的事件系統(tǒng)提供了一種簡單且有效的方式來實現(xiàn)這一目的。組件可以通過事件來將數(shù)據(jù)傳遞給父組件、子組件或任何其他組件。 - 事件的定義與觸發(fā) 要定義一個事件,我們可以在組件中使用Vue的$emit方法。
Vue.component('my-component', {
template: ``,
methods: {
onClick() {
this.$emit('myEvent', 'some data')
}
}
})
當按鈕被點擊時,我們調(diào)用了onClick方法并觸發(fā)了一個叫'myEvent'的事件,并將'some data'作為參數(shù)傳遞給該事件。接下來,可以在父組件中監(jiān)聽該事件。
- 事件的監(jiān)聽
要監(jiān)聽一個事件,我們可以使用Vue的v-on指令并將事件名作為參數(shù)。在我們的例子中,我們可以使用v-on來監(jiān)聽'myEvent'事件:<div id="app">
<my-component v-on:myEvent="handleEvent"></my-component>
</div>
new Vue({
el: '#app',
methods: {
handleEvent(data) {
console.log(data) // 'some data'
}
}
})
在父組件中,我們使用v-on指令監(jiān)聽'myEvent'事件,并在handleEvent方法中打印了傳遞的數(shù)據(jù)。當子組件中的按鈕被點擊時,該事件將被觸發(fā),并將數(shù)據(jù)傳遞給父組件中的handleEvent方法。
- 組件層級
需要注意的是,如果我們在子組件中觸發(fā)一個事件,只有父組件能夠監(jiān)聽該事件。子組件不能監(jiān)聽自己觸發(fā)的事件。這意味著,如果我們有多層嵌套的組件,我們需要將事件通過父組件一層一層地傳遞,以達到所有組件都能接收到的目的。