HarmonyOS 鸿蒙Next 页面返回传参

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

HarmonyOS 鸿蒙Next 页面返回传参 从B页面返回A页面,使用router方式如何传参?使用Navigation如何传参?

3 回复

官方建议使用Navigation跳转了;

Navigation方式如下

A画面

let params = xxxxxx;
this.pageInfos.pushPath({
  name:'B',
  param: params,  // 传给B画面的参数
  onPop: (popInfo: PopInfo) => {
    let str: string = JSON.stringify(popInfo.result);
  }
});

B画面返回

let rsp = xxxxxx;   // B画面返回A时,带回的数据
this.pageInfos.pop(rsp , false);

更多关于HarmonyOS 鸿蒙Next 页面返回传参的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


router返回传参使用router.back,参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-router-V5#routerback

A页面使用 router.getParams() 获取

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(鸿蒙)系统中,页面返回传参通常涉及在不同页面或组件间传递数据。鸿蒙系统提供了多种方式来实现这一功能,以下是一些核心方法:

  1. Intent传递数据: 类似于Android,鸿蒙使用Intent对象来携带数据。在启动目标页面时,可以通过putExtra方法将参数添加到Intent中。在目标页面,通过getIntent()方法获取Intent,再使用对应的get方法提取参数。

  2. 全局变量或数据管理: 对于需要在多个页面间频繁共享的数据,可以考虑使用全局变量或数据管理器。鸿蒙支持创建单例模式的数据管理类,用于存储和访问共享数据。

  3. 服务(Service)通信: 如果数据传递涉及后台服务,可以通过服务通信机制(如AIDL或Messenger)来实现数据传递。这种方式适用于复杂的数据交互场景。

  4. 事件总线(EventBus): 虽然鸿蒙原生未直接提供EventBus机制,但开发者可以通过第三方库或自行实现事件发布/订阅模式,以实现页面间的数据传递和解耦。

请注意,具体实现方式需根据应用的实际需求和架构设计来选择。如果在使用上述方法时遇到具体问题,建议检查参数类型匹配、Intent的正确构建与解析等方面。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部