同一页面组件多次引用,Bus.$on & $off

​业务需求:一个页面,筛选条件和表格,表格部分做成组件引入,表格具有列筛选功能,筛选的时候触发父组件查询接口,参数由Bus.$emit()传过去

filterChange(filters) {

    //执行片段
    ...

    Bus.$emit('filterChange', filters)
}

父组件中:在mounted钩子函数中监听

mounted(){
	Bus.$on('filgerChange', (filters) =>{
	    
	    // 执行片段
	    ...
	    
	})	
}

现象:

由于业务需求,同一各页面引用了多次,只是查询参数不同,页面显示的内容不同,但在查询的时候,两个页面查询事件耦合,A页面调筛选查询接口,会同时触发B页面的查询接口,断点跟踪,Bus.$emit()只执行一次,但Bus.$on()执行了多次

解决:

及时监听 及时关闭 防止多次执行


  created() {
    // 及时监听 及时关闭 防止多次执行
    Bus.$off('filterChange')
  },
  mounted() {
    // 历史数据页面默认调查询接口
    if (this.isHistory) {
      this.searchData();
    }
    Bus.$on('filterChange', (filters) => {
      // debugger
      //执行片段
      ...
    })
  },

注意

不能在destroy钩子中再关闭监听器Bus.$off(),否则页面A页面关闭销毁后,B页面中的方法也会一起失效

错误示例


  Bus.$on('filterChange', (checkSerialList, checkItemList) => {
      // debugger
      //执行片段
      ...
    })
  },
  destroyed() {
    // 卸载注册的事件,否则会多次触发
    Bus.$off('filterChange')
  },

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值