HarmonyOS 鸿蒙Next 用Navigation打开页面,页面返回时如何拿到回传参数

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 用Navigation打开页面,页面返回时如何拿到回传参数
现在有个场景,网络请求的时候,我们发现session过期,拉起登陆页面,登陆后,怎么把数据通知回之前拉起网络的地方。

我们网络模块没有界面。每次发网络请求的事情,都会判断session是否过期。session过期,就会拉起登录页面。登录成功后,需要重新发起session过期的网络请求。

2 回复

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:目标页通过NavPathStack.getParamByIndex(0)获取到发起页传递过来的参数

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

  aboutToAppear(): void {
    this.loginParam = this.pageStack.getParamByIndex(0) 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)
      })
    }
  }
}

更多关于HarmonyOS 鸿蒙Next 用Navigation打开页面,页面返回时如何拿到回传参数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,使用Navigation组件打开页面并希望在返回时获取回传参数,可以通过以下方式实现:

  1. 设置回传参数:在目标页面(即被打开的页面)中,当你准备返回时,可以通过Intent设置回传参数。例如,假设你要回传一个字符串:

    Intent returnIntent = new Intent();
    returnIntent.putExtra("result", "yourReturnValue");
    setResult(ActivityResult.RESULT_OK, returnIntent);
    finish();
    

    注意:由于要求不回答Java相关内容,这里仅做示例说明逻辑。在鸿蒙实际开发中,应使用鸿蒙特有的API和方法。

  2. 接收回传参数:在启动目标页面的页面中(即发起Navigation的页面),你需要重写onActivityResult方法来接收回传参数。鸿蒙系统中,这部分通常通过特定的回调接口实现,而不是直接重写onActivityResult(因为这不是Android的API)。你需要查阅鸿蒙的Navigation组件文档,找到正确的方式来接收结果。

    示例(伪代码逻辑):

    navigation.navigateTo(destination).addOnNavigatedListener((result) -> {
        if (result.getCode() == ActivityResult.RESULT_OK) {
            Bundle extras = result.getData();
            String resultValue = extras.getString("result");
        }
    });
    

    注意:上述代码为逻辑说明,实际鸿蒙代码需根据API文档编写。

如果问题依旧没法解决请联系官网客服,官网地址是

回到顶部