HarmonyOS 鸿蒙Next 使用Navigation跳转到二级页面时首页(@Entry())的onPageHide不回调,回到首页onPageShow也不回调,如何触发回调?是有router跳转到二级页面就可以

HarmonyOS 鸿蒙Next 使用Navigation跳转到二级页面时首页(@Entry())的onPageHide不回调,回到首页onPageShow也不回调,如何触发回调?是有router跳转到二级页面就可以 使用Navigation跳转到二级页面,首页(@Entry())的onPageHide不回调,回到首页onPageShow也不回调,如何才能触发回调?是有roter跳转到二级页面就可以

2 回复

可以使用NavPathStack配合navDestination属性进行页面路由,跳转时可以携带页面的信息,NavDestination有相关的 onShown 和 onHidden 方法。

参考文档:

onPageShow()方法仅在@Entry装饰的自定义组件生效,在Navigation包裹的NavDestination子页面返回时无法触发。

您可以使用如下两种方式监听返回主页面的显示隐藏,在回调方法中处理您的自有业务逻辑,具体说明如下:

  1. 监听Navigation的onNavBarStateChange()事件,在回调中判断显示隐藏:

    参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navigation-V5

    简单示例:

    Navigation(this.pageInfos) {
    }
    .onNavBarStateChange((isVisible: boolean) => {
      console.info('------>isVisible:' + isVisible)
    })
    
  2. 使用无感监听observer.on(‘navDestinationUpdate’):

    在主页面中添加上述监听,在回调方法中进行判断:①、判断结果中的name是否等于紧跟主页面之后打开的子页面;②、判断state状态是否等于1

    参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-arkui-observer-V5#observeronnavdestinationupdate

    简单示例:

    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,

  1. 使用NavDestination的onShown和onHidden事件,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navdestination-V5#事件

  2. 使用组件可见区域变化回调,参考链接: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


在HarmonyOS鸿蒙系统中,使用Navigation组件进行页面跳转时,@Entry()注解的页面(即首页)的onPageHideonPageShow回调不触发的问题,通常与页面的生命周期管理和Navigation组件的具体使用方式有关。

在鸿蒙系统中,页面的生命周期回调依赖于系统的页面栈管理。当使用Navigation组件跳转到二级页面时,如果首页仍然在页面栈中(例如,如果跳转不是通过replace方式进行的),理论上首页的onPageHide应该被触发,而返回首页时onPageShow应该被触发。

如果这些回调没有触发,可能是因为:

  1. 跳转逻辑有误,导致页面栈管理不符合预期。
  2. 页面配置或代码中存在影响生命周期管理的bug。

为了解决这个问题,可以检查以下几点:

  • 确保跳转逻辑正确,使用正确的Navigation方法(如push而非replace,除非有明确需求)。
  • 检查页面栈的变化,确保在跳转和返回时页面栈的状态符合预期。
  • 检查首页和二级页面的代码,确保没有逻辑错误或异常处理导致页面生命周期管理被干扰。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部