# 生命周期

# 应用生命周期

//app.js	小程序的生命周期函数在 app.js 中声明
App({
	onLaunch: function() {
		//小程序初始化(全局只触发一次)
	},
	onShow: function() {
		//小程序显示
	},
	onHide: function() {
		//小程序隐藏
	},
	onError: function(msg) {
		//小程序错误
	},
});
  • 用户首次打开小程序,触发 onLaunch(全局只触发一次)。

  • 小程序初始化完成后,触发 onShow 方法,监听小程序显示。

  • 小程序从前台进入后台,触发 onHide 方法。

  • 小程序从后台进入前台显示,触发 onShow 方法。

  • 小程序后台运行一定时间,会被销毁。

  • 小程序出错,触发onError

image.png

前台、后台定义: 当用户点击右上角关闭,或者按了设备返回键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台

# 页面路由

页面栈以栈(先进后出)的形式维护页面与页面之间的关系,路由更改了页面栈的层数,小程序页面栈最多 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方法

image.png

上次更新: 10/29/2019, 6:04:16 PM