uniapp 踩坑记录 uni.$on为什么不能修改data里面的数据

news/2025/1/11 20:58:06/

文章目录

  • 前言
  • 错误的想法
    • 错误1:触发顺序
    • 错误2:页面刷新
    • 实际执行顺序
  • 解决方法
  • 事故总结

前言

这个其实是个逻辑错误,还好我有个时间的参数,我才看出来是什么问题

错误的想法

我有两个页面,A页面和B页面。A页面里面是列表,B页面是详情。逻辑如下

触发uni.$emit
并打开详情页面
触发uni.$once
接受到A传过来的参数
A列表页面
B详情页面

错误1:触发顺序

要先创建监听器,再触发监听器,A直接跳到B是没有事件触发的。因为A触发的时候B还没有创建监听器。
但是因为uniapp热重置,我每次都从B页面开始测试。页面打开顺序为B->A->B。所以每次都刚好触发监听器

错误2:页面刷新

我使用路由跳转用的是uni.navigateTo。这个函数是保留当前页面,跳转到新页面。但是我的顺序是B->A->B。uni.navigateTo相同页面的时候会重新创建该页面。监听器会触发,但是触发了之后页面立刻被销毁了。所以数据好像就永远修改不了

实际执行顺序

错误顺序

1.修改代码
uniapp热重置
这个时候已经注册了监听器
2.重新回到A
3.触发监听器
打印接受到信息
因为B页面已经存在
销毁旧页面,创建新页面
A列表页面
B详情页面
新B详情页面,data数据初始化

所以每次触发,监听器都能响应,但是data数据就是不能修改

还好我有个列表的参数是创建时间,两个页面差了4s,我看控制台才看出来到底出了什么问题

"number":"TW20230531162103"//打印编号
"number":"TW20230531162107"//页面编号还好我多看了一眼,才发现原来是两个页面

解决方法

使用全局缓存,在A页面设置缓存,在B页面调用缓存

设置全局缓存
打开B页面
A列表页面
B详情页面
尝试获得缓存数据

这里我推荐使用,uni.getStorageSync(KEY),从本地缓存中同步获取指定 key 对应的内容。外面包裹个try catch来解决报错

try{that.test_data = uni.getStorageSync('report_add_data')
}catch(e){console.log(e)//TODO handle the exception
}

事故总结

事件监听只能放在主页面,可以返回的页面,子页面由于启动的顺序和重复打开刷新的问题,在子页面新建的监听器永远都用不上。子传父可以用事件监听,父传子不行。


http://www.ppmy.cn/news/121818.html

相关文章

动圈耳机振膜_什么样的耳机振膜声音更好?为你揭秘耳机振膜的真相

一枚使用镀钛振膜的耳机单元 振膜:动圈耳机核心的发声部件 在我们初中的物理课本当中,有讲过扬声器的发生工作原理,只不过在教科书当中是以音箱的扬声器为例子介绍的,那么动圈式耳机单元的工作原理,又有哪些不同呢&…

攻防世界-easy_RSA

题目如下:在一次RSA密钥对生成中,假设p473398607161,q4511491,e17 求解出d 1. RSA算法介绍 RSA算法是一种非对称加密算法,由三位计算机科学家Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出并命名。 它采用一…

Python numpy - 数组与矩阵的创建&运算

数组array 一 数组的创建 (至少两个数组)创建随机整数数组 a 和 b import numpy as np a np.random.randint(10,size20).reshape(4,5) b np.random.randint(10,size20).reshape(4,5) 二 数组常用函数 数组常用函数 函数作用unique(&…

【samba awsl】redhat配置samba服务器

文章目录 配置yum 关闭防火墙配置smb验证 配置yum 关闭防火墙 vim /etc/yum.repos.d/local.repo[local] namelocal baseurlfile:///dvd/BaseOS gpgcheck0 enabled1[app] nameapp baseurlfile:///dvd/AppStream gpgcheck0 enabled1mkdir /dvd mount /dev/cdrom /dvd yum clean …

IT定律之计算机行业发展规律

1、摩尔定律:摩尔定律是由英特尔(Intel)创始人之一戈登.摩尔(Gordon Moore)提出来的。其内容是:当价格不变时,集成电路上可容纳的元器件数目,约每隔一两年变会增加一倍,性能也将提升一倍。换而言之,相同价格…

DTOF和ITOF的区别

1、DTOF-Direct TOF,直接测量飞行时间,即测量发射脉冲与接收脉冲的时间间隔。DTOF核心组件主要有VCSEL、单光子雪崩光电二极管SPAD,以及时间数字转换器(TDC)。DTOF会在单帧测量时间内发射和接收N次光信号,然…

正规的IT外包公司的报价组成

在IT驻场外包中,外包公司在派遣人员与用人单位之间到底从中抽了多少? 未来需要劳务派遣的企业或者外包的公司会越来越多,这是无可避免的,是大势所趋,不管是大公司,还是小公司,为了抵抗随时可能出…

长沙it培训价格是多少

受互联网的刺激,因此it行业火热并且迅速的发展起来,各大企业对于it开发工程师的需求也在不断的增加,因此越来越多的人参加it培训学习it设计,想要进入it行业中。但是关于如何选择专业的it培训机构的费用问题也是大家比较关心的&…