Vue中的事件$emit是一種觸發(fā)方式,可以將指定事件傳遞給父組件或嵌套組件,從而實(shí)現(xiàn)組件之間通信。
當(dāng)一個(gè)子組件需要將信息傳遞給父組件的時(shí)候,利用Vue實(shí)現(xiàn)的組件的事件和監(jiān)聽(tīng)機(jī)制可以非常方便實(shí)現(xiàn)。當(dāng)需要把其中一個(gè)組件的方法或變量傳遞給另一個(gè)組件的時(shí)候,可以使用emit和on兩個(gè)方法來(lái)實(shí)現(xiàn)。
//發(fā)送事件 this.$emit('自定義事件名稱(chēng)', 參數(shù)); //監(jiān)聽(tīng)事件 this.$on('自定義事件名稱(chēng)', function(參數(shù)){});
在子組件中,通過(guò)使用this.$emit(自定義事件名稱(chēng))來(lái)觸發(fā)組件事件,然后父組件通過(guò)在組件標(biāo)簽上綁定相應(yīng)的事件,并在方法中傳遞子組件傳遞回來(lái)的參數(shù)來(lái)接收事件。
//子組件 Vue.component('child-component', { template: '', methods: { notify: function () { this.$emit('send-msg', '這是一個(gè)來(lái)自子組件的消息') } } }) //父組件 Vue.component('parent-component', { template: '', methods: { receiveMsg: function (payload) { console.log(payload) // 這是一個(gè)來(lái)自子組件的消息 } } })
通過(guò)上方代碼可以看到,在父組件中監(jiān)聽(tīng)了子組件傳遞回來(lái)的'msg'事件,然后接收返回的數(shù)據(jù),完成了組件之間的信息傳遞。