# 生命周期
# 应用生命周期
//app.js 小程序的生命周期函数在 app.js 中声明
App({
onLaunch: function() {
//小程序初始化(全局只触发一次)
},
onShow: function() {
//小程序显示
},
onHide: function() {
//小程序隐藏
},
onError: function(msg) {
//小程序错误
},
});
用户首次打开小程序,触发
onLaunch
(全局只触发一次)。小程序初始化完成后,触发
onShow
方法,监听小程序显示。小程序从前台进入后台,触发
onHide
方法。小程序从后台进入前台显示,触发
onShow
方法。小程序后台运行一定时间,会被销毁。
小程序出错,触发
onError
前台、后台定义: 当用户点击右上角关闭,或者按了设备返回键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台
# 页面路由
页面栈以栈(先进后出)的形式维护页面与页面之间的关系,路由更改了页面栈的层数,小程序页面栈最多 10 层
小程序提供了
getCurrentPages()
函数获取页面栈,第一个元素为首页,最后一个元素为当前页面
wx.switchTab
跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面,页面栈内仅剩当前页。
wx.switchTab({ url: "/pages/index/index", });
wx.reLaunch
关闭所有页面,打开到应用内的某个页面,页面栈内仅剩当前页面。
// index Tab页面 --> A页面 --> B页面 --> C页面 当前 C 页面 // 显示 A 页面 wx.reLaunch({ url: "../A/A", }); // 显示index Tab页面 wx.reLauch({ url: "/pages/index/index", });
wx.redirecTo
关闭当前页面,跳转到应用内的某个页面,页面栈数量不增不减。但是不允许跳转到 tabbar 页面。
// index Tab页面 --> A页面 --> B页面 --> C页面 当前 C 页面 // 重定向到 A页面,此时页面栈 [index页面,A页面,B页面,A页面] wx.redirecTo({ url: "../A/A", });
wx.navigateTo
保留当前页面,跳转到应用内的某个页面,页面栈数量 + 1。但是不能跳到 tabbar 页面。
// 当前 A页面, 跳转到 B页面 wx.navigateTo({ url: "../B/B", });
wx.navigateBack
关闭当前页面,返回上一页面或多级页面 页面栈数量 - n。可通过 getCurrentPages 获取当前的页面栈,决定需要返回几层。
// A页面 --> B页面 --> C页面 当前 C 页面 wx.navigateBack(); // 返回 B 页面 // 返回A页面 wx.navigateBack({ delta: 2, // 返回的页面数,如果大于现有页面数,则返回首页 });
小程序页面内组件跳转
<!--
url 要跳转的页面路径
open-type 跳转方式 对应上面的跳转方法
navigate、redirect、switchTab、reLaunch、navigateBack
delta 当 open-type 为 'navigateBack' 时有效,表示回退的层数,默认为 1
-->
<navigator url="pages/logs/index" open-type="navigate">跳转</navigator>
# 页面的生命周期
- 页面未在页面栈中,初次加载页面,触发
onLoad
方法。 - 页面载入后触发
onShow
方法,显示页面。 - 页面未在页面栈中,初次加载页面,会触发
onReady
方法,渲染页面元素和样式 - 离开本页面时,触发
onHide
方法。 - 当页面从页面栈中被销毁时,触发
onUnload
方法