HarmonyOS navigation UI框架下,onPageShow不回调

HarmonyOS navigation UI框架下,onPageShow不回调

HarmonyOS
2024-08-30 16:29:37
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

onPageShow()方法仅在@Entry装饰的自定义组件中生效,由于子页面并不是使用@Entry修饰的,所以在关闭子页面时并不会触发主页面的onPageShow()方法。通过对Navigation相关接口以及文档资料的翻阅,找到了以下两种方式触发主页面的onPageShow()。

1、监听Navigation的onNavBarStateChange()事件,在回调中判断显示隐藏:参考文档如下:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navigation-V5#事件

2、使用无感监听observer.on(‘navDestinationUpdate’):在主页面中添加上述监听,在回调方法中进行判断:①、判断结果中的name是否等于紧跟主页面之后打开的子页面。

②、判断state状态是否等于1。参考文档如下:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-arkui-observer-V5#observeronnavdestinationupdate

参考示例如下:

NavigationTestPage.ets

import { PageOneTmp } from './PageOne' 
import observer from '@ohos.ArkUI.observer' 
 
@Entry 
@Component 
struct NavigationTestPage { 
  @Provide('pageInfos') pageInfos: NavPathStack = new NavPathStack() 
  aboutToAppear(): void { 
    observer.on('navDestinationUpdate', (info) => { 
      console.info('------>NavDestination state update', JSON.stringify(info)); 
    }); 
  } 
  aboutToDisappear(): void { 
    observer.off('navDestinationUpdate'); 
  } 
  @Builder 
  PageMap() { 
    PageOneTmp() 
  } 
  build() { 
    Navigation(this.pageInfos) { 
      Column() { 
        Button('pushPath', { stateEffect: true, type: ButtonType.Capsule }) 
          .width('80%') 
          .height(40) 
          .margin(20) 
          .onClick(() => { 
            this.pageInfos.pushPath({ name: 'pageOne' }) //将name指定的NavDestination页面信息入栈 
          }) 
      } 
    }.title('NavIndex').navDestination(this.PageMap) 
    .onNavBarStateChange((isVisible: boolean) => { 
      console.info('------>isVisible:' + isVisible) 
    }) 
  } 
  onPageShow(): void { 
    console.info('------>主页显示') 
  } 
}

PageOne.ets

@Component 
export struct PageOneTmp { 
  @Consume('pageInfos') pageInfos: NavPathStack; 
  build() { 
    NavDestination() { 
      Column() { 
        Button('clear', { stateEffect: true, type: ButtonType.Capsule }) 
          .width('80%') 
          .height(40) 
          .margin(20) 
          .onClick(() => { 
            this.pageInfos.clear() //清除栈中所有页面 
          }) 
      }.width('100%').height('100%') 
    }.title('pageOne') 
    .onBackPressed(() => { 
      const popDestinationInfo = this.pageInfos.pop() // 弹出路由栈栈顶元素 
      console.log('pop' + '返回值' + JSON.stringify(popDestinationInfo)) 
      return true 
    }) 
  } 
}
分享
微博
QQ
微信
回复
2024-08-30 20:02:58
相关问题
HarmonyOS页面onPageShow生命周期不回
1036浏览 • 1回复 待解决
HarmonyOS Navigation UI框架
310浏览 • 1回复 待解决
TextInput的onBlur方法不回
1194浏览 • 1回复 待解决
鸿蒙UI框架没有 C++的 UI框架
13499浏览 • 2回复 待解决
HarmonyOS应用开发 没有 C++ UI 框架
14426浏览 • 2回复 待解决
JS UI框架中canvas如何动态指定宽高
6908浏览 • 1回复 待解决
JS UI框架中FA和PA的page之间如何通信?
2764浏览 • 1回复 待解决
HarmonyOS Tab组件无法响应onPageShow
489浏览 • 1回复 待解决