HarmonyOS 鸿蒙Next onPageShow 搭配 router.getParams()使用问题

发布于 1周前 作者 vueper 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next onPageShow 搭配 router.getParams()使用问题

需求: A Page跳转B Page,然后B Page页面关闭并且进行传参,返回到A Page根据这个参数进行相关逻辑比如页面刷新。

解决方式:

根据文档是在A Page的onPageShow生命周期使用router.getParams()获取

问题:

但是当我已经处理了A Page的页面刷新逻辑后,比如我锁屏,再解锁,又触发了一次A Page的onPageShow生命周期,这个时候又获取了router.getParams()然后触发刷新。

想要结果:

不想第二次触发刷新,该如何解决?

14 回复
试一下在取得参数后用router.clear()
同遇到这个问题,有解决方法吗?

设置一个全局的标志变量,在B Page页面关闭时进行修改,A Page的onPageShow生命周期使用router.getParams()获取参数前先判断是不是从B Page页面关闭返回的,如果是则使用router.getParams()获取参数,不是则不做获取参数操作

类似这种

为什么不在aboutToAppear获取页面传参呢,而不是onPageShow
aboutToAppear(){
router.getParams();
}

也发现这个问题,router传参如果没有另一个跳转传参覆盖会一直在,如果另一跳转不传参,还能收到上一次跳转的传参;

另外你这问题也可考虑用onPageHide()处理一个控制变量指示onPageShow是否源自跳转还是后台转前台。

那就持久化存储下
设置一个全局的标志变量,在B Page页面关闭时进行修改,A Page的onPageShow生命周期使用router.getParams()获取参数前先判断是不是从B Page页面关闭返回的,如果是则使用router.getParams()获取参数,不是则不做获取参数操作

如果没有别的更好方式,那貌似只能这样了

自己跳自己一次?以此来清空参数

HarmonyOS的分布式技术让我实现了跨设备的无缝协作,工作效率翻倍。

这时候可以在 pageshow 生命周期中加个判断,只有参数存在的情况下才执行对应逻辑

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

你弄错我意思了,我意思是,A Page息屏后,router.getParams()依然能获取到B返回的数据

在HarmonyOS鸿蒙开发环境中,onPageShow 事件通常用于页面显示时的逻辑处理,而 router.getParams() 方法则用于获取路由传递的参数。若你在搭配使用这两者时遇到问题,可能的原因及解决思路如下:

  1. 调用时机:确保 onPageShow 事件触发时,页面路由已经完全加载,此时调用 router.getParams() 才能正确获取到参数。如果页面还未完全加载就调用,可能会导致参数获取失败。

  2. 参数传递方式:检查在路由跳转时是否正确传递了参数,以及参数的格式是否符合预期。参数传递方式不当或格式错误可能导致 router.getParams() 无法正确解析。

  3. API兼容性:确认你使用的HarmonyOS SDK版本是否支持 onPageShowrouter.getParams() 方法。不同版本的SDK可能存在API差异。

  4. 错误处理:在调用 router.getParams() 时,添加适当的错误处理逻辑,以便在参数获取失败时能够捕捉到错误信息,并进行相应处理。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。这样你可以获得更专业的技术支持和解决方案。

回到顶部