喵小白
喵小白
  • 发布:2020-03-07 14:55
  • 更新:2020-03-18 22:12
  • 阅读:1214

通过监听事件传递消息之后更改的数据没有响应式的更新

分类:uni-app

详细问题描述

答案在下面,this指向的对象变了。
[问题更新]
可能是找到了一个临时的绕过去的方法

    let zancun;  
    export default {  
        data() {  
            return {  
                title: 'Hello'  
            }  
        },  
        onLoad() {  
            uni.$on('update', function(data) {  
                console.log('监听到事件来自 update ,携带参数 msg 为:' + data.msg);  
                zancun = data.msg;  

            })  
        },  
        onShow:function(){  
            this.title = zancun?zancun:this.title ;  
        },

这样可以

[内容]
通过监听事件传递消息之后更改的数据没有响应式的更新.

重现步骤

[步骤]

  1. a页面设置监听事件,监听的回调函数里面把监听到的数据赋值给this.title
  2. 跳转到b页面,触发监听事件,关闭b页面
  3. 这个时候回到a页面

[结果] 页面上用的title变量没有动态响应。控制台打印this.title发现数组是正确保存了,但是页面没有变动

[期望] 通过监听传递的数值在赋值给所在页面的变量后应该在页面动态渲染

[如果语言难以表述清晰,拍一个视频或截图,有图有真相]

IDE运行环境说明

[IDE版本号] 2.6.1.20200226

[windows版本号] win10

uni-app运行环境说明

[运行端版本号] h5

附件

[可重现代码片段]

联系方式

[QQ]

2020-03-07 14:55 负责人:无 分享
已邀请:
DCloud_UNI_FXY

DCloud_UNI_FXY

uni.$on('update', data => { // 注意this上下文,你原来的代码this不是当前vm  
                console.log('监听到事件来自 update ,携带参数 msg 为:' + data.msg);  
                this.title = data.msg;  
                console.log('this.title的值为:' + this.title);  
            })
喵小白

喵小白 (作者)

可能是找到了一个临时的绕过去的方法

    let zancun;  
    export default {  
        data() {  
            return {  
                title: 'Hello'  
            }  
        },  
        onLoad() {  
            uni.$on('update', function(data) {  
                console.log('监听到事件来自 update ,携带参数 msg 为:' + data.msg);  
                zancun = data.msg;  

            })  
        },  
        onShow:function(){  
            this.title = zancun?zancun:this.title ;  
        },

这样可以

liuxingke

liuxingke

onLoad 只会执行一次

  • 喵小白 (作者)

    本来就只需要执行一次啊,监听是一直有效的。实际项目中我是放在函数里面的 用的是once 调用这个函数就会搞一个监听。把这个监听放到onshow里面也是一样的不行

    2020-03-08 22:10

喵小白

喵小白 (作者)

来个官方人员回复一下啊

该问题目前已经被锁定, 无法添加新回复