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();
  },
};
相关推荐
游戏开发爱好者810 小时前
使用Fiddler设置HTTPS抓包诊断Power Query网络问题
android·ios·小程序·https·uni-app·iphone·webview
棋宣13 小时前
uni-app编译到微信小程序中,父传子props首次传递数据不接收的bug
微信小程序·uni-app·bug
阳光先做1 天前
uniapp打包鸿蒙安装包问题
uni-app
码海扬帆:前端探索之旅2 天前
深度定制 uni-combox:新增功能详解与实战指南
前端·vue.js·uni-app
计算机学姐2 天前
基于微信小程序的图书馆座位预约系统【uniapp+springboot+vue】
vue.js·spring boot·微信小程序·小程序·java-ee·uni-app·intellij-idea
中犇科技2 天前
电商app源码系统推荐|开源 uniapp 商城系统
uni-app
海水冷却2 天前
uniapp 实现直播功能的完整方案与实战指南
uni-app
wuxianda10302 天前
Object-C/Swift/UniApp项目苹果商店上架3天极速解决方案汇报总结
ios·uni-app·objective-c·cocoa·苹果上架
WKK_2 天前
uniapp 微信小程序使用TextEncoder,arrayBufferToBase64
微信小程序·小程序·uni-app
喜崽2 天前
uniapp消息会话界面【消息组件一左一右】-01
uni-app