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如何操作才能获取到参数。

阅读 874
1 个回答

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)
      })
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进