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();
  },
};
相关推荐
郑州光合科技余经理2 小时前
本地生活系统:多业务订单字段怎么分账本导出
java·开发语言·前端·数据库·uni-app·php·ai编程
EatFan2 天前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
bug总结3 天前
uniapp vue3全局方法注册使用
前端·javascript·uni-app
大佐不会说日语~3 天前
Android 16 下 uni-app APP 提示“网络连接失败”的排障与修复
android·uni-app
2501_915106323 天前
苹果App Store上架费用及流程全面解析
android·ios·小程序·https·uni-app·iphone·webview
白远山3 天前
家政服务派单平台搭建实战指南:从需求分析到系统设计全流程解析
java·开发语言·架构·uni-app·需求分析
宸翰3 天前
解决uni-app 中 SVG 图片在 iOS 端显示模糊问题
前端·uni-app
走到天涯海角3 天前
uniApp蓝牙在手机上测试
智能手机·uni-app
bug总结4 天前
uniapp的easycom自动组件注册机制
uni-app
HF_code4 天前
uniapp-history路由深度指南
uni-app