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事件重复注册。
解决方案:
- 在A页面的onShow生命周期中注册事件,在onHide中移除事件:
onShow() {
uni.$on("functionA", this.functionA)
},
onHide() {
uni.$off("functionA", this.functionA)
}
- 或者在onLoad中注册事件,在onUnload中移除事件:
onLoad() {
uni.$on("functionA", this.functionA)
},
onUnload() {
uni.$off("functionA", this.functionA)
}