HarmonyOS鸿蒙Next中在onPageShow事件不支持或不执行的情况下,如何监听Navigation首页和子页面互相跳转的过程中两个页面的显示和隐藏?

HarmonyOS鸿蒙Next中在onPageShow事件不支持或不执行的情况下,如何监听Navigation首页和子页面互相跳转的过程中两个页面的显示和隐藏? 在onPageShow事件不支持或不执行的情况下,如何监听Navigation首页和子页面互相跳转的过程中两个页面的显示和隐藏?

4 回复

根据HarmonyOS的API文档,在onPageShow事件不支持或不执行的情况下,NavDestination组件提供了专门的生命周期回调来监听Navigation首页和子页面互相跳转过程中的显示和隐藏。

解决方案

NavDestination提供了以下生命周期回调函数来替代onPageShow:

  1. 页面显示/隐藏的监听
  • onShown (API 10+):当NavDestination页面显示时触发 .onShown((reason: VisibilityChangeReason) => { console.log(‘页面已显示’); })

  • onHidden (API 10+):当NavDestination页面隐藏时触发 .onHidden((reason: VisibilityChangeReason) => { console.log(‘页面已隐藏’); })

  1. 页面显示/隐藏之前的监听
  • onWillShow (API 12+):在Destination显示之前触发 .onWillShow(() => { console.log(‘页面即将显示’); })

  • onWillHide (API 12+):在Destination隐藏之前触发 .onWillHide(() => { console.log(‘页面即将隐藏’); })

  1. 页面挂载/卸载的监听
  • onWillAppear (API 12+):在Destination挂载之前触发
  • onWillDisappear (API 12+):在Destination卸载之前触发
  1. 激活状态的监听
  • onActive (API 17+):NavDestination处于激活态时触发
  • onInactive (API 17+):NavDestination处于非激活态时触发

示例代码

 @Component
 struct MyPage {
   build() {
     NavDestination() {
       // 页面内容
       Text('我的页面')
     }
     .title('页面标题')
     .onShown((reason: VisibilityChangeReason) => {
       console.log('页面显示了');
     })
     .onHidden((reason: VisibilityChangeReason) => {
       console.log('页面隐藏了');
     })
     .onWillShow(() => {
       console.log('页面即将显示');
     })
     .onWillHide(() => {
       console.log('页面即将隐藏');
     })
   }
 }

重要说明

  1. DIALOG模式特殊性:如果NavDestination的mode设置为NavDestinationMode.DIALOG,进出路由栈不会触发下层页面的onShown和onHidden生命周期,只会触发onActive和onInactive。

  2. 生命周期触发顺序:如果路由栈中间页面的生命周期发生变化,跳转之前栈顶Destination的生命周期与跳转之后栈顶Destination的生命周期会在最后一起触发。

更多关于HarmonyOS鸿蒙Next中在onPageShow事件不支持或不执行的情况下,如何监听Navigation首页和子页面互相跳转的过程中两个页面的显示和隐藏?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


加油,

在HarmonyOS Next中,若onPageShow无法使用,可通过页面路由观察器router.PageObserver实现监听。注册PageObserver后,使用onPageShow和onPageHide回调分别监测页面显示与隐藏状态。此方法适用于Navigation组件中首页与子页面间的跳转场景,能准确捕获页面生命周期变化。

在HarmonyOS Next中,若onPageShow事件无法使用,可以通过以下方式监听Navigation中页面切换时的显示/隐藏状态:

  1. 使用页面生命周期回调

    • aboutToAppear()中处理页面显示逻辑
    • aboutToDisappear()中处理页面隐藏逻辑
    • 这两个回调在页面栈变化时会可靠触发
  2. 通过Navigation状态管理

    // 在页面组件中
    [@State](/user/State) isActive: boolean = false
    
    aboutToAppear() {
      this.isActive = true
      // 执行显示相关操作
    }
    
    aboutToDisappear() {
      this.isActive = false
      // 执行隐藏相关操作
    }
    
  3. 使用路由观察者(如有路由管理器):

    • 注册全局路由变化监听器
    • 通过路由路径判断页面显示状态
  4. 自定义事件总线

    • 在页面跳转时发布自定义事件
    • 各页面订阅相关事件来处理显示/隐藏逻辑

建议优先使用aboutToAppearaboutToDisappear这对生命周期函数,它们在Navigation页面栈管理下工作稳定,能准确反映页面的可见性变化。

回到顶部