uniapp 系统学习,从入门到实战(四)—— 页面与路由管理

ops/2025/2/27 13:37:16/


全篇大概 2700 字(含代码),建议阅读时间 20min


在跨平台开发中,高效的路由管理直接影响用户体验和开发效率。本文将深入探讨uniapp的页面创建、路由跳转、参数传递和生命周期管理,助您构建流畅的多端应用。

📚 目录

  1. 页面创建与配置
  2. 路由跳转方法大全
  3. 参数传递与接收技巧
  4. 页面生命周期深度解析
  5. 最佳实践与常见问题

1. 页面创建与配置

1.1 创建页面文件

pages目录下新建.vue文件,建议使用小写字母命名:

请添加图片描述

detail.vue >> 详情页
index.vue >> 首页

### 1.2 配置pages.json```json{"pages": [{"path": "pages/index/index","style": {"navigationBarTitleText": "首页","enablePullDownRefresh": true}},{"path": "pages/index/detail","style": {"navigationBarTitleText": "详情页"}}]
}

1.3 页面初始化模板

<template><view class="content"><!-- 页面内容 --></view>
</template><script>
export default {data() {return {// 初始化数据}}
}
</script><style>
.content {padding: 20rpx;
}
</style>

2. 路由跳转方法大全

2.1 核心跳转API对比

方法 说明 特点
uni.navigateTo 保留当前页,跳转到新页面 产生页面栈,可返回
uni.redirectTo 关闭当前页,跳转到新页面 不产生新页面栈
uni.reLaunch 关闭所有页面,打开新页面 清空页面栈
uni.switchTab 切换Tab页面 专用于Tab栏页面切换
uni.navigateBack 返回上一页 可指定返回层数

2.2 使用示例

// 保留跳转(可返回)
uni.navigateTo({url: '/pages/index/detail'
});// 替换跳转(不可返回)
uni.redirectTo({url: '/pages/index/detail'
});// 关闭所有页面跳转
uni.reLaunch({url: '/pages/login/index'
});// Tab栏切换
uni.switchTab({url: '/pages/tabbar/home'
});

3. 参数传递与接收技巧

3.1 参数传递方式

// 方式1:URL拼接
uni.navigateTo({url: '/pages/detail?id=123&name=uniap'
});// 方式2:对象参数(自动编码)
uni.navigateTo({url: '/pages/detail',success(res) {res.eventChannel.emit('sendData', {id: 456,title: '动态参数'});}
});

3.2 参数接收处理

export default {onLoad(options) {// URL参数获取console.log('接收参数:', options.id); // EventChannel方式const eventChannel = this.getOpenerEventChannel();eventChannel.on('sendData', data => {console.log('事件参数:', data);});}
}

3.3 注意事项

URL参数长度限制:不同平台不同(建议<1KB)
复杂对象需JSON序列化:

const params = encodeURIComponent(JSON.stringify({a:1, b:2})
);
uni.navigateTo({url: `/pages/detail?params=${params}`
});

4. 页面生命周期深度解析

4.1 生命周期流程图

请添加图片描述

4.2 核心生命周期方法

阶段触发时机开发者操作建议
onLoad页面首次加载时(接收参数)解析路由参数,初始化页面数据
onShow页面进入前台时(包括返回)刷新动态数据(如用户信息更新)
onReady页面初次渲染完成操作DOM/调用原生组件API
onHide页面进入后台时(跳转/切后台)保存草稿、暂停动画/音视频
onUnload页面销毁时(无法返回)清除定时器、取消未完成的网络请求

4.3 示例代码

export default {onLoad(options) {console.log('页面加载', options);this.loadData();},onShow() {console.log('页面显示');this.updateBadge();},onReady() {console.log('DOM就绪');this.initMap();},onHide() {console.log('页面隐藏');this.saveDraft();},onUnload() {console.log('页面卸载');clearInterval(this.timer);}
}

5. 最佳实践与常见问题

5.1 路由管理Tips

页面栈限制:小程序平台最多10层

Tab页需在pages.json中预先声明
使用uni.preloadPage预加载提升体验

5.2 常见问题排查

​白屏问题:检查页面路径是否正确
​参数丢失:确保正确使用encodeURIComponent
​生命周期不触发:避免在子组件中使用页面生命周期

5.3 性能优化建议

减少onShow中的复杂逻辑
使用页面预加载技术
合理使用页面卸载时的资源释放

​💡 小贴士:使用uni-simple-router插件可轻松实现更复杂的路由管理需求,支持路由守卫、嵌套路由等高级功能。


http://www.ppmy.cn/ops/161686.html

相关文章

【HarmonyOS Next】地图使用详解(一)

背景 这系列文章主要讲解鸿蒙地图的使用&#xff0c;当前可以免费使用&#xff0c;并提供了丰富的SDK给开发者去自定义控件开发。目前可以实现个性化显示地图、位置搜索和路径规划等功能&#xff0c;轻松完成地图构建工作。需要注意的是&#xff0c;现在测试只能使用实体手机去…

内容中台的企业CMS架构是什么?

企业CMS模块化架构 现代企业内容管理系统的核心在于模块化架构设计&#xff0c;通过解耦内容生产、存储、发布等环节构建灵活的技术栈。动态/静态发布引擎整合技术使系统既能处理实时更新的产品文档&#xff0c;也能生成高并发的营销落地页&#xff0c;配合版本控制机制确保内…

QT和有道词典有冲突,导致内存溢出,闪退。

提示&#xff1a;本文为学习记录&#xff0c;若有疑问&#xff0c;请联系作者。 前言 具体详细查看此博主&#xff1a;原文链接 在使用Qt Designer时&#xff0c;如果开启了有道词典&#xff0c;会导致Qt Designer崩溃。估计应该是把有道词典屏幕取词功能打开后&#xff0c;有…

【星云 Orbit-F4 开发板】03g. 按键玩法七:矩阵键盘单个触发

【星云 Orbit-F4 开发板】03g. 按键玩法七&#xff1a;矩阵键盘单个触发 引言 矩阵键盘是一种常见的输入设备&#xff0c;广泛应用于各种嵌入式系统中。通过矩阵键盘&#xff0c;用户可以通过按键输入字符或控制信号。本文将详细介绍如何使用STM32F407的GPIO引脚实现矩阵键盘的…

【Triton 教程】triton.heuristics

Triton 是一种用于并行编程的语言和编译器。它旨在提供一个基于 Python 的编程环境&#xff0c;以高效编写自定义 DNN 计算内核&#xff0c;并能够在现代 GPU 硬件上以最大吞吐量运行。 更多 Triton 中文文档可访问 →https://triton.hyper.ai/ triton.heuristics(values)用于…

青少年编程与数学 02-010 C++程序设计基础 12课题、输入输出

青少年编程与数学 02-010 C程序设计基础 12课题、输入输出 一、输入输出1. 控制台输入输出1.1 标准输入&#xff08;std::cin&#xff09;读取单个字符读取字符串读取数值读取多行字符串 1.2 标准输出&#xff08;std::cout&#xff09;输出单个字符输出字符串输出数值格式化输…

http 协议和 https 协议的区别在哪里?【详情解答】

HTTP&#xff08;超文本传输协议&#xff09;和HTTPS&#xff08;超文本传输安全协议&#xff09;都是用于在网络上传输数据的协议&#xff0c;二者存在多方面的区别&#xff0c;具体如下&#xff1a; 安全性&#xff1a;这是HTTP和HTTPS最主要的区别。HTTP协议是明文传输数据…

从头再来!社招找工作——算法题复习十:双指针/前缀和/滑动窗口

从头再来&#xff01;社招找工作——算法题复习十&#xff1a;双指针/前缀和/滑动窗口 双指针/前缀和/滑动窗口双指针判断是否为回文字符串&#xff08;Easy&#xff09;盛水最多的容器&#xff08;Middle&#xff09; 前缀和数组的平均数值&#xff08;Easy&#xff09;除自身…