$emit是Vue.js中用于實現(xiàn)組件通信的重要功能之一。
可以通過向父組件中派發(fā)事件,來達到向父組件通信的目的。在派發(fā)事件時,可以附帶一些數(shù)據(jù),以便父組件獲取這些數(shù)據(jù)。
// 子組件中的代碼 methods: { handleClick() { this.$emit('myevent', 'hello') } }
在父組件中監(jiān)聽子組件的事件,就可以獲取到子組件中派發(fā)的數(shù)據(jù)。
// 父組件中的代碼methods: { handleEvent(msg) { console.log(msg) // 輸出 'hello' } }
有時候,我們需要判斷父組件中的事件是否被監(jiān)聽,以避免在沒有監(jiān)聽時,觸發(fā)事件帶來的影響。這時,可以使用$listeners屬性來進行判斷。
// 子組件中的代碼 methods: { handleClick() { if (this.$listeners['myevent']) { this.$emit('myevent', 'hello') } } }
上面的代碼中,首先判斷父組件中是否監(jiān)聽了'myevent'事件,只有當監(jiān)聽了該事件時,才觸發(fā)事件。
使用$listeners屬性,可以讓組件之間的通信更加靈活和安全。