HarmonyOS 鸿蒙Next中页面切换从router换成Navigation后页面不能正常跳转的问题

HarmonyOS 鸿蒙Next中页面切换从router换成Navigation后页面不能正常跳转的问题 之前的版本用的是router实现的页面跳转,用的好好的,router方式被弃用,为适应新版本,只得换成Navigation的方式,但是,发现有的页面在跳转的时候,跳转不过去,同样的方法,其他页面跳转却是正常的。这是什么原因呢?

有哪位开发者遇到过类似的问题吗?

5 回复

感谢您的提问,为了更快解决您的问题,麻烦请补充以下信息:

复现问题的demo

更多关于HarmonyOS 鸿蒙Next中页面切换从router换成Navigation后页面不能正常跳转的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


【背景知识】
NavPathStack:Navigation导航控制器。

NavDestination:作为子页面的根容器,用于显示Navigation的内容区。

【参考方案】
可参考酒店入住评价示例,通过Navigation实现路由跳转效果。

路由跳转与参数传递:通过NavPathStack的pushPathByName方法从订单列表页进行路由跳转、传参和回调,在评价页的NavDestination中通过onReady方法获取参数。

// 路由跳转
this.pageInfos.pushPathByName('UserReviewPage', order.orderId, (popInfo) => {
  // 回调处理
});
// 参数获取
NavDestination()
  .onReady((context: NavDestinationContext) => {
    this.pageInfos = context.pathStack;
    this.orderId = context.pathInfo.param as string;
  })

建议检查如下

1.Navigation要求目标页面必须包裹在NavDestination组件内,而Router跳转的页面可能未遵循此结构

@Entry
@Component
struct TargetPage {
  build() {
    Navigation() {
      NavDestination() {
        // 页面内容
      }
      .title('目标页')
    }
  }
}

2.Router的params参数通过aboutToAppear获取,而Navigation需通过NavPathStack或onReady回调传递

// 跳转时传递参数
NavDestination({ route: 'detail' })
  .onReady((routeParam: Record<string, Object>) => {
    const params = routeParam as { data: string };
    console.log(params.data);
  })

3.未正确注册路由

检查NavDestination的route属性是否与跳转时指定的路由名一致

鸿蒙Next中Navigation组件替代router进行页面跳转时,需确保正确配置路由栈。常见问题包括:1) 未在page.json中声明目标页面;2) Navigation的name属性与目标页面route名称不匹配;3) 未正确处理页面生命周期。检查Navigation.pushUrl()参数是否包含正确的目标页面路径,路径需以"/"开头且与page.json中的route字段完全一致。若使用自定义导航栏,需同步更新Navigation的页面管理逻辑。

在HarmonyOS Next中从Router切换到Navigation后出现页面跳转问题,可能的原因包括:

  1. Navigation栈管理差异:Navigation基于栈管理页面,需要确保目标页面已正确注册到路由表中。检查是否在目标页面的@Entry装饰器中正确配置了路由路径。

  2. 页面参数传递方式变化:Navigation使用params参数对象传递数据,而非Router的URL参数方式。确保跳转时使用类似:

router.pushUrl({
  url: 'pages/TargetPage',
  params: {key: value}
})
  1. 页面生命周期影响:Navigation的页面入栈/出栈行为可能触发不同的生命周期回调,检查目标页面的aboutToAppear()等函数是否有阻塞操作。

  2. 路由表配置问题:确认在main_pages.json中正确配置了所有涉及跳转的页面路径,包括新增的二级/三级页面。

建议先检查控制台是否有相关错误日志,并对比能正常跳转的页面配置差异。可以尝试在目标页面添加简单测试按钮直接跳转,排除参数传递导致的问题。

回到顶部