6***@qq.com
6***@qq.com
  • 发布:2020-03-10 16:28
  • 更新:2022-08-04 17:26
  • 阅读:1875

【报Bug】页面跳转时,第一次不能触发 $on

分类:uni-app

重现步骤

[步骤]
1,新建测试uniapp项目;
2,新建两个页面 A 和 B,在A页面放置一个按钮,点击时 $emit 一个事件,在B页面的 onLoad 中接收
[结果]
第一次从 A 页面跳转到 B 页面时无法触发 $once 事件( $on 事件也一样无法触发),
从 B 返回到 A 再次点击按钮打开 B 页面才能触发 $on 的callback
[期望]
第一次也能触发 B 的 $on 事件

IDE运行环境说明

     HBuilderX    

[IDE版本号]
2.6.1
[windows版本号]
win10 企业版

uni-app运行环境说明

HBuilderX 的内置浏览器  

[可重现代码片段]
A 页面(index.vue):
clickButton() {
uni.$emit('test', 'asdfasdf')
uni.navigateTo({
url: '../test/test'
})
}
B 页面(test.vue):
onReady() {
uni.$once('test', data => {
this.test = data
console.log('inner test: ', this.test) // 从第二次进入页面后可以取到值
})
console.log('outter test: ', this.test) // 任何时候都没有值
},

其他问题: 在 B 页面中 this.test 在 $once 的 calblack 中赋值后可以打印出值,但是在外层则打印不出值。

联系方式

656785105@qq.com

2020-03-10 16:28 负责人:无 分享
已邀请:
6***@qq.com

6***@qq.com (作者)

测试了一整个下午,终于找到解决方法了。在从 A 页面发送事件到新页面 B 时,放到 settimeout 中就可以在 B 页面使用了。

  • z***@foxmail.com

    兄弟,你这个方法我试了也行不通,解决方案可以更具体一点吗

    2020-08-03 09:47

6***@qq.com

6***@qq.com (作者)

浪费生命的bug

a***@163.com

a***@163.com

$on需要在注册后才能被emit触发, A->B=达咩 B->A->B=ok
在A页面第一次$emit时,在B页面的$on还没有注册,$emit先于$on执行,就无法触发到.
给$emit加setTimeout(),让A页面的$emit延迟到$on注册后执行

要回复问题请先登录注册