HarmonyOS Navigation传参问题

主page中声明

@Provide(‘appPathStack’) appPathStack: NavPathStack = new NavPathStack();

子组件中声明

@Consume(‘appPathStack’) appPathStack: NavPathStack;

在子组件中发起this.appPathStack.pushPathByName(‘LoginView’,undefined),跳转登录页

登录页执行操作完毕之后想回跳转到主page并且携带参数,也就是@Provide(‘appPathStack’) appPathStack: NavPathStack = new NavPathStack(); 这个navPathStack如何操作才能获取到参数。

HarmonyOS
2024-12-25 11:48:34
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

Navigation的页面间,通过NavPathInfo对象中的params属性,实现从发起页到目标页的数据传递;通过onPop回调参数,实现处理目标页面的返回。

Step1:构建NavPathInfo对象,输入需要传递给目标页面的参数。

params参数:将需要传递的数据封装起来进行传递。

onPop参数:目标页面触发pop时的返回,在回调中通过PopInfo.info.param获取到返回的对象。

// 发起页 mainPage
let loginParam : LoginParam = new LoginParam()
// 构建pathInfo对象
let pathInfo : NavPathInfo = new NavPathInfo('loginPage', loginParam
  , (popInfo: PopInfo) => {
    let loginParam : LoginParam = popInfo.info.param as LoginParam;
    ...
  })
// 讲参数传递到目标页
this.pageStack.pushDestination(pathInfo, true);   

Step2:目标页面获取发起页参数有两种方式:

方式一:目标页在NavDestination的onReady函数中获取传递过来的参数(推荐使用此方式)

build() {
  NavDestination(){
    ...
  }.hideTitleBar(true)
  .onReady(cxt => {
    this.loginParam = cxt.pathInfo.param as LoginParam;
    ...
  })
}

方式二:目标页通过“NavPathStack.getParamByIndex(this.pageStack.getAllPathName().length - 1)”获取到发起页传递过来的参数

@Component
export struct loginPageView {
  @Consume('pageInfo') pageStack : NavPathStack;

  aboutToAppear(): void {
    this.loginParam = this.pageStack.getParamByIndex(this.pageStack.getAllPathName().length - 1) as LoginParam;
  }
  ...
}

Step3:目标页通过NavPathStack.pop方法返回起始页,其result参数用来传递需要返回给起始页的对象

@Component
export struct loginPageView {
  @Consume('pageInfo') pageStack : NavPathStack;
  // 页面构建的对象
  private loginParam! : LoginParam;
  ...
  build() {
    NavDestination(){
      ...
      Button('login').onClick( ent => {
        // 将对象返回给起始页
        this.pageStack.pop(this.loginParam, true)
      })
    }
  }
}
分享
微博
QQ
微信
回复
2024-12-25 15:00:21
相关问题
HarmonyOS 页面问题
639浏览 • 1回复 待解决
HarmonyOS 参数问题
391浏览 • 1回复 待解决
HarmonyOS 本地html问题
691浏览 • 1回复 待解决
HarmonyOS @Builder Params问题
266浏览 • 1回复 待解决
HarmonyOS router获取问题
774浏览 • 1回复 待解决
如何在navigation跳转页面时返回
2114浏览 • 1回复 待解决
JS跳转Java问题
5158浏览 • 1回复 待解决
HarmonyOS HTTP使用Map问题
410浏览 • 1回复 待解决
HarmonyOS 自动化测试问题
288浏览 • 1回复 待解决
跨设备启动FA问题
8590浏览 • 1回复 待解决
HarmonyOS 页面导航跳转回调问题
1500浏览 • 0回复 待解决
HarmonyOS POST请求
413浏览 • 1回复 待解决
HarmonyOS 页面间如何
1229浏览 • 1回复 待解决
烧录问题,我有一点疑惑
7909浏览 • 4回复 待解决
路由如何接?可否给个案例?
3503浏览 • 1回复 待解决
HarmonyOS router跳转返回如何
205浏览 • 1回复 待解决
HarmonyOS 调用flutter页面并
217浏览 • 1回复 待解决
网络请求-GET请求
900浏览 • 1回复 待解决