HarmonyOS 鸿蒙Next 使用Navigation系统路由表时,页面返回上一个页面传递参数方式和参数接收方式

发布于 1周前 作者 songsunli 最后一次编辑是 5天前 来自 鸿蒙OS

使用Navigation系统路由表时,页面返回上一个页面传递参数方式及目标页面参数接收方式 目前页面跳转使用Navigation系统路由表,页面跳转时,使用

let params: PageOneParams = {oneParam: "oneParam"};

his.pageInfos.pushPathByName('pageOne', params);
``
在目标页面

.onReady((context: NavDestinationContext) => {

this.pageInfos = context.pathStack;

Logger.info("current page config info is " + JSON.stringify(context.getConfigInRouteMap()));

let params: PageOneParams = context.pathInfo.param as PageOneParams;

console.log(JSON.stringify(params));

})

方法中接收参数。

但在页面返回时,使用

let params: PageOneParams = {oneParam: “oneParamFromTwo”};

this.pageInfos.popToName(“pageOne”, params);

但是在目标页面onReady方法中接收到参数,查看文档说是onReady只在页面创建时调用。

在这种场景下,如何在目标页面正常接收返回参数?

更多关于HarmonyOS 鸿蒙Next 使用Navigation系统路由表时,页面返回上一个页面传递参数方式和参数接收方式的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
.onClick(() => {
  this.queryNavigationInfo()?.pathStack.pushPathByName('pageB', null, (popInfo: PopInfo) => {
    hilog.debug(0x000000, 'rainrain', '返回的数据' + popInfo.result.toString())
  })
})

更多关于HarmonyOS 鸿蒙Next 使用Navigation系统路由表时,页面返回上一个页面传递参数方式和参数接收方式的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


上一级页面 pushPathByName 有一个onPop 回调,在 onPop 回调里面处理,可以参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/ts-basic-components-navigation-V13#pushpathbyname11

我找一个按钮举个例子吧:

index 页面,onClick方法里修改如下:

       .onClick(() => {

            //Push the NavDestination page information specified by name onto the stack, and pass the data as param.

            let params: PageOneParams = {oneParam: “oneParam”};

            //this.pageInfos.pushPathByName(‘pageOne’, params);

            // this.pageInfos.pushPath({name: “pageOne”, param: params});

            this.pageInfos.pushPathByName(‘pageOne’,params, (popInfo: PopInfo) => {

              let message = '[pushPathByName]last page is: ’ + popInfo.info.name + ', result: ’ + JSON.stringify(popInfo.result);

              console.log(“message:”, message);

            });

          })

pageone页面,第52行onClick方法里修改如下:

       .onClick(() => {

            let params: PageTwoParams = {twoParam: “oneParamFromOne”};

            this.pageInfos.pop( params);

          })

param 这个是必填项,不能写null,不想传参的话,直接传空字符串就行了,

           this.pageInfos.pushPathByName(‘pageOne’,’’, (popInfo: PopInfo) => {

              let message = '[pushPathByName]last page is: ’ + popInfo.info.name + ', result: ’ + JSON.stringify(popInfo.result);

              console.log(“message:”, message);

            });

在HarmonyOS 鸿蒙Next系统中,使用Navigation系统路由表进行页面跳转时,页面间传递参数和接收参数的方式如下:

参数传递方式

  1. Intent传递:在启动目标页面时,可以通过Intent携带参数。例如,使用Intent.putExtra(String name, Serializable value)方法将参数放入Intent中。

  2. Bundle传递:可以先将要传递的参数放入一个Bundle对象中,然后将Bundle对象放入Intent中。例如,使用Bundle bundle = new Bundle(); bundle.putString("key", "value"); intent.putExtras(bundle);

参数接收方式

  1. 在目标页面的onStart方法中接收:目标页面可以通过getIntent()方法获取启动它的Intent,然后通过intent.getStringExtra(String name)intent.getBundleExtra(String name)等方法获取传递的参数。

  2. 使用Data Ability URI传递复杂数据:对于更复杂的数据传递,可以考虑使用Data Ability URI,将数据编码到URI中,然后在目标页面解析URI获取数据。

注意,确保传递的参数类型与接收时使用的类型一致,以避免类型转换错误。

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

回到顶部