HarmonyOS 鸿蒙Next:Navigation页面路由到NavDestination子页面,子页面pop返回到Navigation页面时,如何触发生命周期回调?

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

HarmonyOS 鸿蒙Next:Navigation页面路由到NavDestination子页面,子页面pop返回到Navigation页面时,如何触发生命周期回调?

16 回复

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

大概率是开屏页是导航的根视图(Navigation),push到其他子页面(NavDestination)。但是这里因为要触发弹窗所以使用单独使用Router。。。 很丑陋的实现需求

Splash页只能用router了,主页用Navigation了

楼主您好,使用navigation跳转的页面不会走onPageShow生命周期,NavDestination提供了onShown、onHidden、onBackPressed等属性可以设置对应的回调函数,可以通过这些属性设置。

我明白了,使用一个空白的导航页(Navigation),开屏页作为一个NavDestination来使用。就可以拿到开屏页的生命周期了

可以用 emitter

pushPath时 支持传入一个onPop,文档说下一个页面返回时会自动触发,但是我试了无效 我api12,模拟器测得。

pop11+

pop(result: Object, animated?: boolean): NavPathInfo | undefined

弹出路由栈栈顶元素,并触发onPop回调传入页面处理结果。

但是我使用的是官方的RouterModule方案:(https://gitee.com/harmonyos_samples/navigation-router),路由模块是单独抽离的,pushPath是统一处理的。当然也可以这样做,就是多添加一个OnPop的传参而已。但是用这个去满足我的业务需求感觉怪怪的,有点曲线救国的感觉。因为我的需求是:根页面每次出现onPageShow时触发,而不是子页面pop时触发。。。虽然效果是差不多,总感觉怪怪的。。。

最好是改系统路由表吧,官方的HMOS案例都改系统路由表了

系统路由表就没有这样的问题吗?

个人感觉官方推荐用LocalStorage,当然你也可以在主页面中触发onpageshow再传递,[@watch](/user/watch)等方法
使用tab和Navigation的子页面中是不会触发onpageshow的。
类似于这个示例:https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/tutorials_NEXT-FirstStartDemo_HOS

在开屏页的用户协议弹窗中,点击弹窗链接路由至网页,然后返回至开屏页时再次打开弹窗。
这个示例使用的是router实现,但是我是使用Navigation。router每次返回时能触发onpageshow,但是Navigation无法触发

之前用 router 实现,迁移到 navigation 后,同样遇到这个问题。目前的解决方案:将用户协议用单独的页面实现。

在HarmonyOS中,使用Navigation组件进行页面路由时,子页面通过pop()方法返回到Navigation页面时,会自动触发生命周期回调。具体而言,子页面会经历onPauseonStop(如果完全不可见),然后Navigation页面则可能接收到onStartonResume等回调,这取决于Navigation页面在返回时的状态。

确保在子页面的onDestroyonPause等回调中正确处理资源释放和状态保存,以及在Navigation页面的onResume等回调中恢复必要状态。

如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部