喜欢技术的前端
喜欢技术的前端
  • 发布:2020-07-28 14:45
  • 更新:2020-07-30 11:27
  • 阅读:733

很神奇的bug uni.$emit

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: x64

HBuilderX类型: Alpha

HBuilderX版本号: 2.8.2

手机系统: Android

手机系统版本号: Android 9.0

手机厂商: 小米

手机机型: 红米6a

页面类型: vue

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

三个页面a,b,c, 在c页面, 给a和b页面用uni.$emit 传递相同的数据 {name:'张三'} ,b页面对接收的数据进行修改{name:'李四'},a页面接收到数据加了延时,结果b页面修改数据,a页面延时获取的数据{name:'李四'}而不是张三,也被改变了

预期结果:

b数据修改 a加延时不修改

实际结果:

b数据修改 a也跟着变

bug描述:

三个页面a,b,c, 在c页面, 给a和b页面用uni.$emit 传递相同的数据 {name:'张三'} ,b页面对接收的数据进行修改{name:'李四'},a页面接收到数据加了延时,结果b页面修改数据,a页面延时获取的数据{name:'李四'}而不是张三,也被改变了

2020-07-28 14:45 负责人:无 分享
已邀请:
喜欢技术的前端

喜欢技术的前端 (作者) - QQ---445849201

onLoad() {
uni.$on('A', function(data) {
console.log(data); //{"name":"张三"}
var ha = data;
console.log(ha); //{"name":"张三"}
var haa = ha;
console.log(haa); //{"name":"张三"}
setTimeout(()=>{
console.log(haa); //{"name":"李四"}
console.log('A页面的数据也变了');
},500)
});
},

喜欢技术的前端

喜欢技术的前端 (作者) - QQ---445849201

传附件

DCloud_UNI_HT

DCloud_UNI_HT

一点都不神奇

emit:function(){  
    var _this = this;  
    uni.$emit('A',_this.data);  
    uni.$emit('B',_this.data);  
}

你把_this.data 换成不同的对象试试

  • 喜欢技术的前端 (作者)

    var _this = this;

    var obj = _this.data;

    uni.$emit('A',obj);

    uni.$emit('B',_this.data);

    需求是一个值传递给两个地方用

    2020-07-30 13:22

  • 喜欢技术的前端 (作者)

    请问应该怎么处理呢

    2020-07-30 13:23

  • DCloud_UNI_HT

    回复 喜欢技术的前端: 你传递的是同一个对象,而这个对象都是引用类型,在你传递的时候,肯定是一个修改了,就都修改了。使用 JSON.stringify 序列化一下

    2020-08-10 14:49

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