在组件中使用$bus事件总线之后,如果自定义事件是相同的时候,如果在多个父组件中监听,在进行路由跳转后会出现非父组件$on触发的问题
home子组件
methods:{ imageLoad(){ this.$bus.$emit('item-image-load') } }
home中监听
mounted() { this.busRefresh = ()=>{ this.$refs.scroll.refresh() } this.$bus.$on("item-image-load", this.busRefresh) }
detail子组件
methods:{ imageLoad(){ this.$bus.$emit('item-image-load') } }
detail中监听
mounted() { this.busRefresh = () =>{ if(this.$refs.scroll) { this.$refs.scroll.refresh() } } this.$bus.$on("item-image-load", this.busRefresh) }
可以发现home和detail的子组件都发射了一个名为item-image-load的自定义事件,那么问题来了,在组件路由的切换过程中,home->detail中,home中依旧能监听到,这样就非常不好的,为了避免这个问题,实现当前组件的子组件发射自定义事件在当前父组件中监听到,那就必须要在路由跳转离开当前组件之前进行销毁,如果组件使用了缓存(keep-alive),那么就在deactivated中销毁,否则在组件的destroyed中销毁(每个页面都会有自己的生命周期,默认在离开组件后都是进行destroyed销毁)