《UniApp 页面导航跳转全解笔记》

一、前提:UniApp 的页面架构

在 UniApp 中,导航跳转分两类:

  • 页面级跳转pages/ 下的页面)

  • 组件内跳转(如封装的按钮、商品卡片、导航栏内跳转)

组件不能直接使用路由标签 <navigator> 跳转到外部页面(除非放在页面模板中),

所以组件中通常使用 uni.navigateTo()uni.switchTab() 等 API。

🧭跳转方式总览

方法 说明 适用场景
uni.navigateTo() 跳转到非 tabBar 页面,可返回 普通页面跳转
uni.redirectTo() 关闭当前页跳转 替换当前页
uni.switchTab() 跳转到 tabBar 页面 首页、我的、分类等底部导航
uni.reLaunch() 关闭所有页面跳转 登录后跳主页面
uni.navigateBack() 返回上一个页面 返回按钮
<navigator> 模板跳转标签 H5 / 简单页面跳转

二、页面级跳转

✅ 1. 普通页面跳转

javascript 复制代码
// 在组件或页面内
goDetail(id) {
  uni.navigateTo({
    url: `/pages/detail/detail?id=${id}`
  });
}


uni.navigateTo({
  url: '/pages/detail/detail?id=123',
  success: () => console.log('跳转成功'),
  fail: (err) => console.log('跳转失败', err)
})

✅ 2. 跳转到 tabBar 页面

⚠️ 注意:switchTab() 只能跳转到 pages.json 里配置过的 tabBar 页面,否则无效。

javascript 复制代码
goHome() {
  uni.switchTab({
    url: '/pages/index/index'
  });
}

✅ 3. 替换当前页面(登录成功)

javascript 复制代码
loginSuccess() {
  uni.redirectTo({
    url: '/pages/home/home'
  });
}

✅ 4. 清空所有页面并跳转(重启导航栈)

javascript 复制代码
logout() {
  uni.reLaunch({
    url: '/pages/login/login'
  });
}

✅ 5. 返回上一个页面

javascript 复制代码
goBack() {
  uni.navigateBack({
    delta: 1
  });
}
javascript 复制代码
(1) 普通跳转(保留当前页,可返回)
uni.navigateTo({
  url: '/pages/home/home?id=123', // 支持路径+参数
  success: () => console.log('跳转成功'),
  fail: (err) => console.log('跳转失败', err)
});
 
(2) 重定向(关闭当前页,不可返回)
uni.redirectTo({
  url: '/pages/login/login'
});
 
(3) TabBar 页面跳转
uni.switchTab({
  url: '/pages/tabbar/index'
});
 
(4) 返回上一页
uni.navigateBack({
  delta: 1 // 返回层数
});
 
 

三、组件方式实现跳转 <navigator>

1、<navigator>是什么?

<navigator> 是 UniApp 的内置导航组件

它在 H5、小程序、App 端都能直接使用,作用类似于 HTML 的 <a> 标签。

✅ 它的主要功能是:点击后 自动跳转到指定页面,无需写 JS 代码。

官网:navigator | uni-app官网

javascript 复制代码
<navigator url="/pages/about/about">
  <view class="btn">跳转到关于页面</view>
</navigator>

点击后会自动跳转到 /pages/about/about 页面。

⚠️ 注意:

目标页面必须已经在 pages.json 中注册,否则跳转无效。

2、常用属性说明

属性名 类型 说明
url String 跳转的目标路径(必须是已注册的页面)
open-type String 跳转方式(默认 navigate
hover-class String 点击时的样式类名
hover-start-time Number 按住后多久出现点击态,默认 50ms
hover-stay-time Number 手指松开后保留点击态时间,默认 600ms
target String 指定跳转的目标,默认 self(当前小程序)

open-type(跳转类型):

说明 是否返回上页
navigate 保留当前页跳转
redirect 关闭当前页跳转
switchTab 跳转到 tabBar 页面
reLaunch 关闭所有页面后打开
navigateBack 返回上一个页面
exit 退出应用(仅 App)
javascript 复制代码
✅ 示例一:普通跳转
<navigator url="/pages/detail/detail" open-type="navigate">
  查看详情
</navigator>

✅ 示例二:跳转到 tabBar 页面 (只能跳转到 pages.json 中 tabBar 列表里定义的页面。)
<navigator url="/pages/index/index" open-type="switchTab">
  回到首页
</navigator>

✅ 示例三:重启并跳转(清空栈)
<navigator url="/pages/login/login" open-type="reLaunch">
  返回登录页
</navigator>

✅ 示例四:返回上一页
<navigator open-type="navigateBack" delta="1">
  返回
</navigator>

💡五、hover-class(点击态样式)
<navigator
  url="/pages/detail/detail"
  hover-class="active"
>
  <view class="btn">跳转详情</view>
</navigator>

<style>
.active {
  opacity: 0.6;
  transform: scale(0.98);
}
</style>

🎯 六、动态参数传递
可以像 URL 一样拼接参数:
<navigator url="/pages/detail/detail?id=123&type=book">
  跳转并传参
</navigator>

在目标页面接收:
onLoad(options) {
  console.log(options.id, options.type)
}
相关推荐
likuolei几秒前
XSL-FO 软件
java·开发语言·前端·数据库
正一品程序员1 分钟前
vue项目引入GoogleMap API进行网格区域圈选
前端·javascript·vue.js
j***89467 分钟前
spring-boot-starter和spring-boot-starter-web的关联
前端
star_111212 分钟前
Jenkins+nginx部署前端vue项目
前端·vue.js·jenkins
im_AMBER20 分钟前
Canvas架构手记 05 鼠标事件监听 | 原生事件封装 | ctx 结构化对象
前端·笔记·学习·架构
JIngJaneIL21 分钟前
农产品电商|基于SprinBoot+vue的农产品电商系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·农产品电商系统
Tongfront26 分钟前
前端通用submit方法
开发语言·前端·javascript·react
可爱又迷人的反派角色“yang”29 分钟前
LVS+Keepalived群集
linux·运维·服务器·前端·nginx·lvs
han_29 分钟前
前端高频面试题之CSS篇(二)
前端·css·面试
JIngJaneIL31 分钟前
书店销售|书屋|基于SprinBoot+vue书店销售管理设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·书店销售管理设计与实现