天天看點

VUE 3移除了Events API

作者:RemoveS

vue2 可以使用$on, $off ,$once 進行元件間通信,雖然不建議使用全局event bus進行元件間通信,但一定情況下還是很友善的

//eventBus.js 
const eventBus = new Vue() 
export default eventBus           
// a.vue 
import eventBus from './eventBus' 
export default { 
 mounted() { 
  eventBus.$on('a-event',
   () => { console.log('a') }) },
 beforeDestroy() { 
  eventBus.$off('a-event') }
}           
// b.vue 
import eventBus from './eventBus' 
export default { 
 methods: { 
  //b元件調用這個方法時候
  //a元件就會列印'a'
  call() { 
   eventBus.$emit('a-event')  
  }
 }
}           

但在vue3中已經完全删除了$on, $off ,$once這三個方法

VUE 3移除了Events API

官方推薦使用第三方庫 mitt 或者 tiny-emitter

官方給出了更新方案---

// eventBus.js 
import mitt from 'mitt' 
export default { 
	$on: (...args) => mitt.on(...args),
	$once: (...args) => mitt.once(...args), 
	$off: (...args) => mitt.off(...args),
	$emit: (...args) => mitt.emit(...args)
}           

平時項目中我們可以單獨使用mitt 還蠻友善的

<script src="./mitt.js"></script>
<script>
var mitt=mitt()
mitt.on('go',function(param){
 console.log(param)
})
mitt.on('go',function(param){
 console.log('go'+param)
})
</script>
<script>
 mitt.emit('go','to')
 console.log(mitt)
</script>           
VUE 3移除了Events API

看看mitt源碼編譯成js才幾十行

VUE 3移除了Events API
VUE 3移除了Events API