vue bus事件总线 非父组件$on触发的解决办法

在组件中使用$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销毁)

上一篇:配置中心对比


下一篇:​周报月报书是不是让你很烦,今天介绍一本零基础入门Python数据分析的书