HarmonyOS 页面导航

使用文档推荐的navigation导航,整个应用就一个Entry页面,其他都是组件,进行导航时,没有生命周期回调函数要怎么弄。比如页面A跳转到页面B,这个时候页面A处于不可见状态,我需要在页面A里得到这个回调去做一些逻辑处理要怎么弄。

HarmonyOS
18h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

Component如何监听应用前后台切换 参考地址:

https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkui-kit-V5#section986317105383

navigation暂无系统回调,可以用两个变量,一个监控窗口展示的是否是当前页面和 一个监听页面是否在前台,同时满足的时候可以播放 demo如下:

@Component
struct Page01 {
  @Consume('pageInfos') pageInfos: NavPathStack;
  build() {
    NavDestination() {
      Button('push Page01')
        .width('80%')
        .onClick(() => {
          this.pageInfos.pushPathByName('Page01', '');
        })
        .margin({top: 10, bottom: 10})
    }
    .title('Page01')
  }

  aboutToAppear(): void {
    console.log("页面出现")
    AppStorage.set<boolean>('isAppear', false);
  }
  aboutToDisappear(): void {
    console.log("页面消失")
    AppStorage.set<boolean>('isAppear', true);
  }

}

@Entry
@Component
struct Index3 {
  //监听页面是否在前台
  @StorageLink('isOnForeground') @Watch('change') isOnForeground: boolean = true;
  //监控窗口展示的是否是当前页面
  @StorageLink('isAppear') @Watch('isAppearChange') isAppear: boolean = false;
  change() {
    if (this.isOnForeground && this.isAppear ) {
      this.startVideo()
    } else {
      this.endVideo()
    }
  }

  isAppearChange() {
    if (this.isAppear && this.isOnForeground) {
      this.startVideo()
    } else {
      this.endVideo()
    }
  }
  //当窗口展示当前页面且在前台时播放
  startVideo() {
    console.log("播放页面已显示")
  }

  endVideo() {
    console.log("播放页面已隐藏")
  }

  @Provide('pageInfos') pageInfos: NavPathStack = new NavPathStack()
  isLogin: boolean = false;
  @State text: string = "push Page01"
  @Builder
  PagesMap(name: string) {
    Page01()
  }

  aboutToAppear(): void {
    console.log("测试页面出现")
    AppStorage.set<boolean>('isAppear', true);
  }
  aboutToDisappear(): void {
    console.log("测试页面消失")
    AppStorage.set<boolean>('isAppear', false);
  }

  build() {
    Navigation(this.pageInfos) {
      Button(this.text)
        .width('80%')
        .onClick(() => {
          this.pageInfos.pushPathByName('Page01', '');
          //处理相关逻辑
          this.text = "测试一下修改文字"
        })
    }
    .mode(NavigationMode.Stack)
    .titleMode(NavigationTitleMode.Mini)
    .title('主页')
    .navDestination(this.PagesMap)
  }
}
分享
微博
QQ
微信
回复
16h前
相关问题
页面导航如何实现两个页面叠层
1966浏览 • 1回复 待解决
HarmonyOS 页面导航跳转回调传参问题
1086浏览 • 0回复 待解决
页面导航如何实现A B两个页面叠层
685浏览 • 1回复 待解决
HarmonyOS Navigation导航
17浏览 • 1回复 待解决
HarmonyOS 地址导航
47浏览 • 1回复 待解决
HarmonyOS 应用导航
0浏览 • 0回复 待解决
webview导航无法正常导航,怎么处理?
6013浏览 • 1回复 待解决
HarmonyOS 应用发起导航意图
384浏览 • 0回复 待解决