HarmonyOS鸿蒙Next中Navigation popToName 里面的result怎么获取到

HarmonyOS鸿蒙Next中Navigation popToName 里面的result怎么获取到 请问Navigation popToName 里面的result怎么获取到?

3 回复

push里有个onPop回调接收入栈页面出栈时的返回结果,并进行处理

参考文档:Navigation-导航与切换-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者

此处onPop不触发,是因为在页面跳转时,传的回调函数,是对应页面的出栈的回调。

如:A跳转B,此时定义的是B的出栈回调;B跳转C,此时定义的是C的出栈回调。如果此时在C页面直接popToName至A,是C出栈,调用C的出栈回调,方法是在B中执行。由于C直接返回A,B页面走的是清除,因此A页面没有触发B页面的出栈回调。

对于该问题,这里提供几个思路去解决:

  1. 如果页面使用的是router作为路由,可以使用router.back并指定页面同时添加返回带的参数,中间页面的历史都会被清除。

  2. 可以使用replacePathByName+removeByName替代popToName,中间页面使用removeByName清除,需要返回的页面使用replacePathByName 跳转并带参数。

  3. 可以使用popToName,并使用其他组件之间的传值方法,比如但不限于LocalStorage、自行传递方法或对象做数据处理。

更多关于HarmonyOS鸿蒙Next中Navigation popToName 里面的result怎么获取到的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,Navigation.popToName方法用于返回到指定的页面。popToName方法可以通过result参数传递数据。要在目标页面获取result,可以在目标页面的onPageShowonPageResult方法中接收。

例如:

import router from '@ohos.router';

class TargetPage {
  onPageShow() {
    const result = router.getParams()['result'];
    console.log('Received result:', result);
  }
}

在调用popToName时,可以通过params传递result

router.popToName('TargetPage', { result: 'Your data here' });

result会在目标页面的onPageShowonPageResult方法中获取到。

在HarmonyOS鸿蒙Next中,使用Navigation.popToName方法时,可以通过NavigationResult来获取返回的结果。具体步骤如下:

  1. 在目标页面调用Navigation.popToName时,传递一个NavigationResult对象。
  2. 在源页面中,通过Navigation的回调方法(如onResult)来接收和处理返回的NavigationResult对象。
  3. onResult方法中,使用NavigationResult.getResult获取返回的结果数据。

示例代码:

Navigation.popToName("targetPage", new NavigationResult());

在源页面:

@Override
public void onResult(NavigationResult result) {
    Object data = result.getResult();
    // 处理返回的数据
}

通过这种方式,你可以在页面导航时获取到返回的结果。

回到顶部