HarmonyOS 鸿蒙Next 使用Navigation跳转到二级页面时首页(@Entry())的onPageHide不回调,回到首页onPageShow也不回调,如何触发回调?是有router跳转到二级页面就可以
可以使用NavPathStack配合navDestination属性进行页面路由,跳转时可以携带页面的信息,NavDestination有相关的 onShown 和 onHidden 方法。
参考文档:
-
NavPathStack文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navigation-V5#navpathstack10
-
NavDestination文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navdestination-V5
onPageShow()方法仅在@Entry装饰的自定义组件生效,在Navigation包裹的NavDestination子页面返回时无法触发。
您可以使用如下两种方式监听返回主页面的显示隐藏,在回调方法中处理您的自有业务逻辑,具体说明如下:
-
监听Navigation的onNavBarStateChange()事件,在回调中判断显示隐藏:
简单示例:
Navigation(this.pageInfos) { } .onNavBarStateChange((isVisible: boolean) => { console.info('------>isVisible:' + isVisible) })
-
使用无感监听observer.on(‘navDestinationUpdate’):
在主页面中添加上述监听,在回调方法中进行判断:①、判断结果中的name是否等于紧跟主页面之后打开的子页面;②、判断state状态是否等于1
简单示例:
aboutToAppear(): void { observer.on('navDestinationUpdate', (info) => { console.info('------>NavDestination state update', JSON.stringify(info)); }); } aboutToDisappear(): void { observer.off('navDestinationUpdate'); }
navigation的是一个页面的根容器,navDestination是navigation的一个组件,不是一个page,所以不会走onpageShow和onpageHide,
-
使用NavDestination的onShown和onHidden事件,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navdestination-V5#事件
-
使用组件可见区域变化回调,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-component-visible-area-change-event-V5#onvisibleareachange
如果以上还是不能满足您的需求,您可以尝试使用HMRouter
更多关于HarmonyOS 鸿蒙Next 使用Navigation跳转到二级页面时首页(@Entry())的onPageHide不回调,回到首页onPageShow也不回调,如何触发回调?是有router跳转到二级页面就可以的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html