uni-app 之 页面路由

概述

uni-app 的路由功能用于管理应用中的页面跳转和导航。与传统 Web 开发不同,uni-app 支持多端运行,因此其路由机制针对不同平台进行了优化和适配。

路由配置

pages.json 配置

在 pages.json 文件中配置应用的页面路径和窗口表现:

json 复制代码
{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {
        "navigationBarTitleText": "首页"
      }
    },
    {
      "path": "pages/detail/detail",
      "style": {
        "navigationBarTitleText": "详情页"
      }
    }
  ]
}

页面跳转方式

在模板中使用 navigator 组件实现页面跳转:

html 复制代码
<navigator url="/pages/detail/detail?id=123" hover-class="navigator-hover">
  跳转到详情页
</navigator>

2. API 编程式跳转

uni.navigateTo()

保留当前页面,跳转到应用内的某个页面:

javascript 复制代码
uni.navigateTo({
  url: "/pages/detail/detail?id=123",
});
uni.redirectTo()

关闭当前页面,跳转到应用内的某个页面:

javascript 复制代码
uni.redirectTo({
  url: "/pages/detail/detail?id=123",
});
uni.switchTab()

跳转到 tabBar 页面:

javascript 复制代码
uni.switchTab({
  url: "/pages/index/index",
});
uni.reLaunch()

关闭所有页面,打开到应用内的某个页面:

javascript 复制代码
uni.reLaunch({
  url: "/pages/index/index",
});
uni.navigateBack()

关闭当前页面,返回上一页面或多级页面:

javascript 复制代码
uni.navigateBack({
  delta: 1,
});

路由传参

URL 参数传递

javascript 复制代码
// 传递参数
uni.navigateTo({
  url: '/pages/detail/detail?id=123&name=test'
})

// 接收参数
onLoad(options) {
  console.log(options.id)   // 123
  console.log(options.name) // test
}

对象参数传递

javascript 复制代码
// 使用 encodeURIComponent 传递复杂对象
const params = { id: 123, data: { name: 'test' } }
uni.navigateTo({
  url: `/pages/detail/detail?params=${encodeURIComponent(JSON.stringify(params))}`
})

// 接收参数
onLoad(options) {
  const params = JSON.parse(decodeURIComponent(options.params))
}

路由生命周期

页面生命周期函数

javascript 复制代码
export default {
  onLoad(options) {
    // 页面加载时触发
  },
  onShow() {
    // 页面显示时触发
  },
  onReady() {
    // 页面初次渲染完成时触发
  },
  onHide() {
    // 页面隐藏时触发
  },
  onUnload() {
    // 页面卸载时触发
  },
};

页面栈管理

获取当前页面栈:

javascript 复制代码
// 获取当前页面栈实例
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];

注意事项

  1. 页面栈限制:小程序端页面栈最多 10 层
  2. tabBar 页面 :只能使用 uni.switchTab() 跳转
  3. 返回按钮:非 tabBar 页面左上角有返回按钮
  4. 参数长度限制:URL 参数过长可能导致截断
  5. 跨端兼容:不同平台路由行为可能存在差异

常见问题解决

页面传参丢失

确保参数正确编码:

javascript 复制代码
// 错误示例
url: "/pages/detail/detail?data=" + JSON.stringify(obj);

// 正确示例
url: `/pages/detail/detail?data=${encodeURIComponent(JSON.stringify(obj))}`;

页面返回不刷新

在 onShow 生命周期中处理数据更新逻辑:

javascript 复制代码
export default {
  onShow() {
    // 每次页面显示时重新加载数据
    this.loadData();
  },
};
相关推荐
遗憾随她而去.1 天前
uniApp跨端开发: 解决不同平台显示差异问题
uni-app
程序鉴定师4 天前
2026年深圳小程序/App开发公司技术选型指南:从架构设计到交付标准全维度评估
java·小程序·uni-app·php·objective-c
Q26433650234 天前
【有源码】基于uni-app的旅游行程规划小程序-基于微信小程序的智慧文旅综合服务平台
java·微信小程序·小程序·uni-app·毕业设计·springboot·源代码
qq_316837755 天前
阿里云百炼 fun-asr-realtime uniapp vue3 调用
javascript·vue.js·uni-app
特创数字科技5 天前
uniapp 图片全能处理|全平台支持(鸿蒙、安卓、苹果、web),实现九宫格、水印、滤镜、压缩、拼图
uni-app
2501_916007475 天前
苹果应用商店App Store上架费用标准及原因解析
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张6 天前
苹果App Store上架指南:费用、原理与步骤详解
android·ios·小程序·https·uni-app·iphone·webview
特创数字科技6 天前
【uni-app x】告别系统相机限制!三端通用自定义相机组件:任意布局、静默拍照、录像、水印叠加、连拍回图一次搞定
前端·数码相机·uni-app
Martin -Tang6 天前
uniapp app嵌套webview 弹窗方式
android·ios·uni-app
郑州光合科技余经理7 天前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程