HarmonyOS Navigation页面出栈时,onShown是否执行

使用Navigation和NavDestination路由,页面跳转都没问题,但是页面出栈时无法监听页面的展示。

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

可以通uiObserver.on(‘navDestinationUpdate’,func)来进行监听,文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-navigation-navigation-V5#%E9%A1%B5%E9%9D%A2%E7%9B%91%E5%90%AC%E5%92%8C%E6%9F%A5%E8%AF%A2

通过eventHub传递事件,文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-inner-application-eventhub-V5

示例代码如下:

// index.ets
eventFunc() {
  console.log('eventFunc is called');
}

aboutToAppear() {
  if (!this.entryHapRouter) {
    this.entryHapRouter = new NavPathStack();
  }
  console.log("====Index=aboutToAppear=")
  let context = getContext() as common.UIAbilityContext;
  context.eventHub.on('myEvent', this.eventFunc);
  RouterModule.createRouter(RouterNameConstants.ENTRY_HAP, this.entryHapRouter);
};
// EntryAbility.ets
windowStage.getMainWindow((err: BusinessError, data) => {
  let windowClass = data;
  let uiContext: UIContext = windowClass.getUIContext();

  let uiObserver: UIObserver = uiContext.getUIObserver();
  uiObserver.on("navDestinationUpdate", (info) => {
    // NavDestinationState.ON_SHOWN = 0, NavDestinationState.ON_HIDE = 1
    if (info.state == 0) {
      // NavDestination组件显示时操作
      console.info('page ON_SHOWN:' + info.name.toString());
      console.info('page ON_SHOW:' + info.navDestinationId.toString());
    } else if (info.state == 1) {
      console.info('page ON_HiDDEN:' + info.name.toString());
      console.info('page ON_HiDDEN:' + info.navDestinationId.toString());
      this.context.eventHub.emit('myEvent');
    }
  })
})
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS NavPathStack问题
571浏览 • 1回复 待解决
HarmonyOS 页面关闭问题
397浏览 • 1回复 待解决
如何在navigation跳转页面返回传参
1808浏览 • 1回复 待解决