uni-app $on()注册的事件只能触发一次,非常常用的方法,请修复

uni-app $on()注册的事件只能触发一次,非常常用的方法,请修复

开发环境 版本号 项目创建方式
Windows win10 64位 HBuilderX

操作步骤:

  • 在A页面onLoad里添加 uni.$on(“functionA”,this.functionA),全局注册functionA方法
  • 3/9补充:A页面是tabbar页面,才会有这个问题

预期结果:

  • 在B页面使用uni.$emit(“functionA”),functionA触发成功
    然后返回,重新进入B页面,再次uni.$emit(“functionA”) => 触发成功

实际结果:

  • 在B页面使用uni.$emit(“functionA”),functionA触发成功
    然后返回,重新进入B页面,再次uni.$emit(“functionA”) => 触发失败

bug描述:

  • 工作的代码,不方便贴
    uni.$on()好像变成了uni.$once(),但也不是只触发一次,是第二次进入触发的页面就不能触发

更多关于uni-app $on()注册的事件只能触发一次,非常常用的方法,请修复的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

问题已经解决
如果uni.$off没有传入参数,则移除App级别的所有事件监听器;
我在页面B使用了uni.$off()
期望有一个移除某个页面所有注册方法的事件

更多关于uni-app $on()注册的事件只能触发一次,非常常用的方法,请修复的实战教程也可以访问 https://www.itying.com/category-93-b0.html


虽然我没遇到,但是遇事解决留方案的精神值得点赞!

这是一个uni-app中事件监听在tabbar页面重复注册的常见问题。原因是tabbar页面在切换时不会被销毁,导致$on事件重复注册。

解决方案:

  1. 在A页面的onShow生命周期中注册事件,在onHide中移除事件:
onShow() {
  uni.$on("functionA", this.functionA)
},
onHide() {
  uni.$off("functionA", this.functionA)
}
  1. 或者在onLoad中注册事件,在onUnload中移除事件:
onLoad() {
  uni.$on("functionA", this.functionA)
},
onUnload() {
  uni.$off("functionA", this.functionA)
}
回到顶部