组件复用的bug

bug:当组件被多个页面复用时,组件被触发时传递的事件可能会传递到多个页面。然而并非所有的页面都需要接收这个事件
解决办法(两种):

  1. 判断路由:在组件触发事件往外传递之前先判断当前路由:
    imageLoad() {
      if (this.$route.path.indexOf("/home") !=-1) {
        this.$bus.$emit("itemImageLoad");
      } else if (this.$route.path.indexOf("/detail") !=-1) {
        this.$bus.$emit("detailItemImgLoad");
      }
    },
  1. 对监听的事件进行保存,当离开页面时,取消对应的对全局事件的监听
  mounted() {
    // 监听GoodsItem中的图片是否加载完成
    const refresh = debounce(this.$refs.scroll.refresh, 200);

    // 对监听的事件进行保存
    this.itemImgLoad = () => {
      refresh();
    };
    this.$bus.$on("itemImageLoad", this.itemImgLoad);
  },

  deactivated() {
    // 在离开页面前,取消全局事件的监听
    this.$bus.$off("itemImageLoad", this.itemImgLoad);
  },

注意:如果使用的组件没有缓存(keep-alive)是无法调用deactivated()的,可以用destroyed()代替

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值