Vue的事件系統(tǒng)使用了觀察者模式,允許組件之間相互通信。其中Vue實(shí)例的$on方法可以用于監(jiān)聽(tīng)另一個(gè)組件上觸發(fā)的事件。
// 監(jiān)聽(tīng)事件 vm.$on('my-event', function (msg) { console.log(msg); }) // 觸發(fā)事件 vm.$emit('my-event', 'hello');
$on方法接收兩個(gè)參數(shù),第一個(gè)參數(shù)是事件名稱,第二個(gè)參數(shù)是回調(diào)函數(shù)。當(dāng)組件中使用$emit觸發(fā)了該事件,$on中綁定的回調(diào)函數(shù)就會(huì)被執(zhí)行。
需要注意的是,$on方法只能監(jiān)聽(tīng)另一個(gè)組件上觸發(fā)的事件,不能監(jiān)聽(tīng)當(dāng)前組件自身觸發(fā)的事件。如果要監(jiān)聽(tīng)自身事件,可以使用$watch。
// 監(jiān)聽(tīng)屬性變化 vm.$watch('value', function (newVal, oldVal) { console.log('new value:', newVal, ', old value:', oldVal); })
$watch方法接收兩個(gè)參數(shù),第一個(gè)參數(shù)是需要觀察的屬性名稱,第二個(gè)參數(shù)是回調(diào)函數(shù)。當(dāng)屬性值發(fā)生改變時(shí),回調(diào)函數(shù)就會(huì)被執(zhí)行。
總之,$on和$watch都是Vue事件系統(tǒng)中非常重要的方法,可以幫助我們理解組件之間的通信和屬性變化的監(jiān)聽(tīng)。