1299395323@qq.com
1299395323@qq.com
  • 发布:2020-05-20 09:56
  • 更新:2020-05-27 23:18
  • 阅读:169

【报Bug】uni.$on传值有问题

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10企业版

HBuilderX类型: 正式

HBuilderX版本号: 2.6.16

手机系统: Android

手机系统版本号: Android 9.0

手机厂商: 小米

手机机型: 小米8青春版

页面类型: vue

nvue编译模式: fast

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

index页面触发uni.$emit并跳转到home页面

//index.vue页面    
           goPage(){    
                uni.$emit("home","home");    
                uni.navigateTo({    
                    url:"/pages/home/home"    
                })    
            }

在home页面uni.$on的回调函数可以拿到值,但是外面不行

//home.vue页面    
onLoad() {    
      uni.$on("home",(data)=>{    
                this.title=data;    
                console.log(this.title);//有值    
            });    
            setTimeout(_=>{    
                console.log(this.title);//无值    
            },1000);    
              console.log(this.title);//无值    
        },

操作步骤:

一个页面通过uni.$emit传值并跳转页面,在新的页面中通过uni.$on监听,在回调函数中可以获取到值,uni.$on外获取不到

预期结果:

uni.$on监听的值在回调函数外也能获取到

实际结果:

uni.$on回调函数获取得到值,回调函数外获取不到

bug描述:

一个页面通过uni.$emit传值并跳转页面,在新的页面中通过uni.$on监听,在回调函数中可以获取到值,uni.$on外获取不到

2020-05-20 09:56 负责人:无 分享
已邀请:
1299395323@qq.com

1299395323@qq.com (作者)

为什么这么严重的问题没人理

奔涌吧后浪

奔涌吧后浪 - 奔涌吧后浪

同问,希望官方看到回复一下

奔涌吧后浪

奔涌吧后浪 - 奔涌吧后浪

我解决了
1.首先 A进B 不建议用事件模式 直接路径带参数 onload里获取比较好 你这里的问题就是 你在B监听 A发送事件 A在发送的时候 B还没开始监听 所以建议你用事件模式的时候 注意 先监听要在发送事件的前面完成
2.监听回调里面赋值给上了,外面还是没变,建议这里用that替换掉this,回调事件里 统一用that。

白羽

白羽

我觉得可能是你的this用错了。建议参考 @奔涌吧后浪 的建议。

...  
uni.$on("home",(data)=>{      
    this.title=data;    //这个this应该指的是$on函数的调用者,即uni  
    console.log(this.title);//有值      
});      
setTimeout(_=>{      
    console.log(this.title);//无值    //这里的this是当前页面  
},1000);      
console.log(this.title);//无值     //这里的this是当前页面  
...

要回复问题请先登录注册