HarmonyOS路由导航全攻略

在HarmonyOS中实现导航与路由切换,主要通过@ohos.router模块完成。以下为完整实现方案:

1. 基本路由跳转

import router from '@ohos.router';

// 跳转到指定页面
function navigateTo(targetPage: string) {
  router.pushUrl({
    url: `pages/${targetPage}`
  }).catch(err => {
    console.error(`路由跳转失败: ${err}`)
  })
}

// 示例:跳转到详情页
navigateTo('DetailPage')

2. 参数传递与接收

发送参数:

router.pushUrl({
  url: 'pages/DetailPage',
  params: { id: 123, name: '商品A' }
})

接收参数:

// 在目标页面onPageShow中获取
onPageShow() {
  const params = router.getParams();
  console.log(`接收参数: id=${params['id']}, name=${params['name']}`)
}

3. 路由返回与结果传递

// 返回上一页并传递结果
router.back({
  url: 'pages/IndexPage',
  params: { result: '操作成功' }
})

// 接收返回结果
onPageShow() {
  if (router.getParams()?.['result']) {
    showToast(router.getParams()['result'])
  }
}

4. 路由拦截器

实现全局路由守卫:

// 添加前置守卫
router.addBeforeHook(() => {
  if (!isLogin()) {
    showDialog('请先登录')
    return false // 拦截跳转
  }
  return true // 放行
})

// 添加后置守卫
router.addAfterHook(() => {
  logRouteAction() // 记录路由行为
})

5. 动态路由配置

// config.json 片段
"pages": [
  "pages/IndexPage",
  "pages/DetailPage",
  "pages/ProfilePage"
]

6. 导航栏控制

// 隐藏导航栏
router.setPageParams(this, {
  navigationBarHidden: true
})

// 修改标题
router.setPageParams(this, {
  title: '新标题'
})

关键API说明

方法说明
pushUrl()跳转新页面
replaceUrl()替换当前页面
back()返回上一页
clear()清空路由栈
getLength()获取路由栈深度
getState()获取路由状态

最佳实践

  1. 路由命名规范:采用模块/功能的层级命名(如product/detail
  2. 参数验证:使用zodclass-validator验证路由参数
  3. 路由懒加载:通过router.dynamicImport实现按需加载
  4. 异常处理:统一封装路由错误处理逻辑
  5. 路由动画:通过router.setPageParams配置页面切换动画

注意:实际开发中需在config.json中声明所有路由页面,页面路径最大深度不超过32级。对于复杂应用,建议使用Navigator组件实现容器内导航。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虎王科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值