$bus
事件总线 在某些情况下,我们可能需要从一个组件发送事件到另一个组件,如果它们直接没有直接的联系,我们可能需要依次向它们的父组件传递事件,这样显得稍微麻烦,我们可以使用 Vuex 来解决这个问题。但是,Vuex 中保存的是状态(变量),有时候可能无法直接处理事件,这时,我们呢可以使用 Vue 中的事件总线 $bus
。
$bus
类似 Vuex,只要有一个组件发射了事件,那么,其它任何组件都可以接收到这个事件。但是,Vue 中并没有直接提供 $bus
,所以,需要我们自己进行某些处理,如下:
main.js
// 定义事件总线 Vue.prototype.$bus = new Vue()
GoodsListItem.vue
<template> <div class="goods-item"> <!-- Vue 内置函数 @load 用来监听图片是否加载完成,类似 js 中的 img.onload = function --> <img :src="item.image" alt="" @load="imageLoad"> <!-- ... --> </div> </template> <script> export default { methods: { imageLoad() { // 使用事件总线发送事件 this.$bus.$emit('goodsItemImgLoad') } } } </script>
Home.vue
export default { created() { // 接收事件 this.$bus.$on('goodsItemImgLoad', () => { this.$refs.scroll.refresh() }) }, }