三个页面a,b,c, 在c页面, 给a和b页面用uni.$emit 传递相同的数据 {name:'张三'} ,b页面对接收的数据进行修改{name:'李四'},a页面接收到数据加了延时,结果b页面修改数据,a页面延时获取的数据{name:'李四'}而不是张三,也被改变了
- 发布:2020-07-28 14:45
- 更新:2020-07-30 11:27
- 阅读:733
很神奇的bug uni.$emit
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: x64
HBuilderX类型: Alpha
HBuilderX版本号: 2.8.2
手机系统: Android
手机系统版本号: Android 9.0
手机厂商: 小米
手机机型: 红米6a
页面类型: vue
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
b数据修改 a加延时不修改
b数据修改 a加延时不修改
实际结果:
b数据修改 a也跟着变
b数据修改 a也跟着变
bug描述:
三个页面a,b,c, 在c页面, 给a和b页面用uni.$emit 传递相同的数据 {name:'张三'} ,b页面对接收的数据进行修改{name:'李四'},a页面接收到数据加了延时,结果b页面修改数据,a页面延时获取的数据{name:'李四'}而不是张三,也被改变了
喜欢技术的前端 (作者) - 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)
});
},
一点都不神奇
emit:function(){
var _this = this;
uni.$emit('A',_this.data);
uni.$emit('B',_this.data);
}
你把_this.data 换成不同的对象试试