查看: 199|回复: 0

鸿蒙uni-app x navigator页面跳转与踩坑

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
在 HarmonyOS 上使用 uni-app x 做页面导航时,navigator 是一个可直接在模板里完成跳转的组件。它从 HarmonyOS 4.61 开始支持。navigator 本身不显示 UI,只给子组件添加点击跳转事件,里面可以放 text、image、button 或列表项。它和 uni.navigateTo 等 API 的取舍是:简单跳转用 navigator,复杂逻辑用 API。

一、基础跳转
navigator 类似 HTML 的 a 标签,但跳转目标是应用内页面,通过 url 指定路径,点击子组件即触发跳转。
  1. <template>
  2.   <navigator url='/pages/detail/detail?id=123'>
  3.     <text>点击跳转到详情页</text>
  4.   </navigator>
  5. </template>
复制代码

二、核心属性与跳转方式
open-type 控制跳转方式:navigate 保留当前页,redirect 关闭当前页再跳转,switchTab 切换 tabBar,navigateBack 返回上一页。navigateBack 配合 delta 指定返回层数,默认返回上一页。
动画由 animation-type 控制,支持 none、slide-in-right、slide-in-left、slide-in-top、slide-in-bottom、fade-in、zoom-out、pop-in;animation-duration 可设置动画时长,例如 500。点击态通过 hover-class 指定,若不需要点击态可设置 hover-class='none'。

三、带参数跳转
navigator 没有 API 那样的 query 对象,参数需要手动拼到 url 后面,目标页在 onLoad 的 options 中读取。参数包含特殊字符时,要用 encodeURIComponent 编码。
  1. onLoad((options: Record<string, string>) => {
  2.   console.log('id:', options['id'])
  3.   console.log('name:', options['name'])
  4. })
复制代码

四、列表页跳转
商品列表、文章列表适合直接用 navigator 包裹每一项,这样不用给每个 item 单独写点击事件。可以配合 v-for 生成 url,再用 hover-class 定义点击态。

五、典型跳转场景
1. redirect:关闭当前页再跳转,返回时不会回到当前页,适合登录成功跳首页。
2. switchTab:切换底部 Tab 栏,只能跳 tabBar 页面,不能带参数。
3. navigateBack:返回上一页或上两页,delta 表示返回层数。
4. 自定义动画:如 slide-in-right、slide-in-bottom、fade-in、zoom-out、none,可设置 animation-duration,例如 500。

六、鸿蒙平台特性
鸿蒙平台从 HarmonyOS 4.61 开始支持 navigator。navigator 在鸿蒙上使用原生实现,页面转场使用鸿蒙系统原生的页面转场效果,animation-type 支持的动画在鸿蒙上也有良好表现。作为对比,鸿蒙原生开发中页面跳转使用 router:
  1. // 鸿蒙原生写法
  2. router.pushUrl({
  3.   url: 'pages/detail/detail',
  4.   params: { id: 123, name: '测试' }
  5. })
复制代码
相比之下,uni-app x 的 navigator 更像 HTML 的 a 标签,用法更直观。

七、常见踩坑
1. navigate 不能跳转到 tabBar 页面,需要切换 Tab 时使用 switchTab。
2. redirect 关闭当前页再跳转,用户按返回键不会回到当前页;希望可返回时用 navigate。
3. 参数需要手动拼接,特殊字符要 encodeURIComponent。
4. 不想要点击态时设置 hover-class='none'。
5. navigateBack 的 delta 表示返回层数,如果 delta 大于页面栈层数,会返回首页。
6. switchTab 不能带参数,需要传数据时用 uni.navigateTo 或全局变量。
7. navigator 会给子组件添加点击事件,不支持子组件点击事件冒泡;如果 navigator 里放了按钮,按钮的点击事件可能被 navigator 的跳转覆盖。

八、小结
navigator 是 uni-app x 中实现页面跳转的模板方案,优势是不用写 method,列表项跳转尤其方便。实际使用时记住:open-type 控制跳转方式;url 带参数要手动拼接;tabBar 页面用 switchTab;redirect 不返回;鸿蒙 4.61 开始支持;简单跳转用 navigator,复杂逻辑用 API。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-18 13:33 , Processed in 0.020730 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部