HarmonyOS 鸿蒙Next NavPathStack.popToName 时,父页面如何获取到result 参数返回的数据?

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

HarmonyOS 鸿蒙Next NavPathStack.popToName 时,父页面如何获取到result 参数返回的数据?

导航路径如下,都是通过 Navigation 进行导航
 

A -> B -> C

进入 C 之后,调用popToName 返回到 B,在 B 页面的 NavDestination.onShow 中,通过

getParamByName 或者 
getParamByIndex 拿到的都是 A -> B 时的参数,而不是从 C 返回 B 时的参数,请问 B 页面如何获取到到从 C 页面返回时,所携带的参数?

10 回复
同问,有没有类似于onNewIntent的方式能够获取到新的参数
b->c 的时候
this.pageInfos.pushPathByName("pageOne",new Object(),(popInfo)=>{
console.log("-pushPathByName" + popInfo.info.name + ', result: ' + JSON.stringify(popInfo.result) )

})

C 点击返回的时候popToName 参数就在上面的那里接收

更新一下,找到一种很别扭的方法:

1. popToName

2. replacePathByName,这时param 参数传入需要返回的数据

3. getParamByName 

这个方法可以,但是 replace 没有页面切换动画是什么问题

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-arkui-observer-V5#ZH-CN_TOPIC_0000001847051940__navdestinationswitchinfo12

popToName之前通过getParamByName把数据替换一下,通过navDestinationSwitch就能拿到新的数据了
 observer.on('navDestinationSwitch',this.getUIContext(),(info)=>{
      //1 push
      //2 pop
     const param= info.to['param'] as object
      console.info('NavDestination navDestinationSwitch',  info.operation);
    })<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
onpageshow 里面??

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

navigation 导航时,生命周期回调并不会回调onPageShow方法

而是通过 NavDestination.onShow 触发

在HarmonyOS鸿蒙系统中,当使用NavPathStack.popToName方法返回到父页面时,若希望父页面能够获取到子页面返回的result参数数据,可以通过以下方式实现:

  1. 子页面返回数据:在子页面执行Intent返回操作时,通过IntentputExtra方法将需要返回的数据作为参数添加到Intent中。

  2. 父页面接收数据:父页面需要在onNewIntentonActivityResult(如果适用)方法中,通过IntentgetExtrasgetStringExtra等方法获取到子页面传递过来的数据。

  3. 确保数据传递的时机:确保在调用NavPathStack.popToName方法后,子页面的数据已经正确设置到返回的Intent中,并且父页面在适当的生命周期方法中能够接收到这个Intent

  4. 数据类型的匹配:在传递和接收数据时,注意数据类型的匹配,以避免类型不匹配导致的异常。

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

回到顶部