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
1天前
浏览
收藏 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
微信
回复
1天前
相关问题
HarmonyOS 页面问题
381浏览 • 1回复 待解决
HarmonyOS 参数问题
81浏览 • 1回复 待解决
HarmonyOS 本地html问题
287浏览 • 1回复 待解决
HarmonyOS router获取问题
555浏览 • 1回复 待解决
HarmonyOS @Builder Params问题
0浏览 • 0回复 待解决
JS跳转Java问题
4841浏览 • 1回复 待解决
HarmonyOS HTTP使用Map问题
60浏览 • 1回复 待解决
如何在navigation跳转页面时返回
1803浏览 • 1回复 待解决
跨设备启动FA问题
8220浏览 • 1回复 待解决
HarmonyOS 自动化测试问题
37浏览 • 1回复 待解决
HarmonyOS POST请求
63浏览 • 1回复 待解决
HarmonyOS 页面导航跳转回调问题
1086浏览 • 0回复 待解决
HarmonyOS 页面间如何
924浏览 • 1回复 待解决
路由如何接?可否给个案例?
3198浏览 • 1回复 待解决
烧录问题,我有一点疑惑
7623浏览 • 4回复 待解决
HarmonyOS router跳转返回如何
4浏览 • 0回复 待解决
HarmonyOS 调用flutter页面并
22浏览 • 1回复 待解决
网络请求-GET请求
563浏览 • 1回复 待解决