詳解微信小程序應(yīng)用和頁(yè)面生命周期
什么是生命周期
生命周期(Life Cycle)是指一個(gè)對(duì)象從創(chuàng)建→>運(yùn)行>銷毀的整個(gè)階段,強(qiáng)調(diào)的是一個(gè)時(shí)間段。如:
- 張三出生,表示這個(gè)人生命周期的開(kāi)始
- 張三離世,表示這個(gè)人生命周期的結(jié)束
- 中間張三的一生,就是張三的生命周期
我們可以把每個(gè)小程序運(yùn)行的過(guò)程,也概括為生命周期:
- 小程序的啟動(dòng),表示生命周期的開(kāi)始
- 小程序的關(guān)閉,表示生命周期的結(jié)束
- 中間小程序運(yùn)行的過(guò)程,就是小程序的生命周期
生命周期的分類
在小程序中,生命周期分為兩類,分別是:
- 應(yīng)用生命周期
特指小程序從啟動(dòng)->運(yùn)行->銷毀的過(guò)程
- 頁(yè)面生命周期
特指小程序中,每個(gè)頁(yè)面的加載->渲染->銷毀的過(guò)程
其中,頁(yè)面的生命周期范圍較小,應(yīng)用程序的生命周期范圍較大:

生命周期函數(shù)
生命周期函數(shù):是由小程序框架提供的內(nèi)置函數(shù),會(huì)伴隨著生命周期,自動(dòng)按次序執(zhí)行。
生命周期函數(shù)的作用:允許程序員在特定的時(shí)間點(diǎn),執(zhí)行某些特定的操作。例如,頁(yè)面剛加載的時(shí)候,可以在onLoad生命周期函數(shù)中初始化頁(yè)面的數(shù)據(jù)。
注意:生命周期強(qiáng)調(diào)的是時(shí)間段,生命周期函數(shù)強(qiáng)調(diào)的是時(shí)間點(diǎn)。
小程序中的生命周期函數(shù)分為兩類,分別是:
應(yīng)用的生命周期函數(shù)
特指小程序從啟動(dòng)->運(yùn)行-→>銷毀期間依次調(diào)用的那些函數(shù)頁(yè)面的生命周期函數(shù)
特指小程序中,每個(gè)頁(yè)面從加載->渲染-→>銷毀期間依次調(diào)用的那些函數(shù) 小程序的應(yīng)用生命周期函數(shù)
小程序的應(yīng)用生命周期函數(shù)需要在app.js 中進(jìn)行聲明。如:
App({
/**
* 當(dāng)小程序初始化完成時(shí),會(huì)觸發(fā) onLaunch(全局只觸發(fā)一次)
*/
onLaunch: function () {
console.log("小程序啟動(dòng)!");
},
/**
* 當(dāng)小程序啟動(dòng),或從后臺(tái)進(jìn)入前臺(tái)顯示,會(huì)觸發(fā) onShow
*/
onShow: function (options) {
console.log('小程序正在前臺(tái)運(yùn)行!');
},
/**
* 當(dāng)小程序從前臺(tái)進(jìn)入后臺(tái),會(huì)觸發(fā) onHide
*/
onHide: function () {
console.log("小程序進(jìn)入后臺(tái)運(yùn)行!");
},
/**
* 當(dāng)小程序發(fā)生腳本錯(cuò)誤,或者 api 調(diào)用失敗時(shí),會(huì)觸發(fā) onError 并帶上錯(cuò)誤信息
*/
onError: function (msg) {
}
})
- 用戶首次打開(kāi)小程序,觸發(fā) onLaunch(全局只觸發(fā)一次)。
- 小程序初始化完成后,觸發(fā)onShow方法,監(jiān)聽(tīng)小程序顯示。
- 小程序從前臺(tái)進(jìn)入后臺(tái),觸發(fā) onHide方法。
- 小程序從后臺(tái)進(jìn)入前臺(tái)顯示,觸發(fā) onShow方法。
- 小程序后臺(tái)運(yùn)行一定時(shí)間,或系統(tǒng)資源占用過(guò)高,會(huì)被銷毀。
| 屬性 | 類型 | 描述 | 觸發(fā)時(shí)機(jī) |
|---|---|---|---|
| onLaunch | Function | 監(jiān)聽(tīng)小程序初始化 | 當(dāng)小程序初始化完成時(shí),會(huì)觸發(fā) onLaunch(全局只觸發(fā)一次)。 |
| onShow | Function | 監(jiān)聽(tīng)小程序顯示 | 當(dāng)小程序啟動(dòng),或從后臺(tái)進(jìn)入前臺(tái)顯示,會(huì)觸發(fā) onShow |
| onHide | Function | 監(jiān)聽(tīng)小程序隱藏 | 當(dāng)小程序從前臺(tái)進(jìn)入后臺(tái),會(huì)觸發(fā) onHide |
| onError | Function | 錯(cuò)誤監(jiān)聽(tīng)函數(shù) | 當(dāng)小程序發(fā)生腳本錯(cuò)誤,或者 api 調(diào)用失敗時(shí),會(huì)觸發(fā) onError 并帶上錯(cuò)誤信息 |
| 其他 | Any | 開(kāi)發(fā)者可以添加任意的函數(shù)或數(shù)據(jù)到 Object 參數(shù)中,用 this 可以訪問(wèn),上面的getPics就是函數(shù), globalName是數(shù)據(jù),這里面的函數(shù)和數(shù)據(jù)都是全局的。調(diào)用方式:在Pager中通過(guò)getApp()方法得到App對(duì)象并獲得全局的數(shù)據(jù)和調(diào)用全局的函數(shù) |
前臺(tái)、后臺(tái)定義: 當(dāng)用戶點(diǎn)擊左上角關(guān)閉,或者按了設(shè)備 Home 鍵離開(kāi)微信小程序并沒(méi)有直接銷毀,而是進(jìn)入了后臺(tái);當(dāng)再次進(jìn)入微信或再次打開(kāi)小程序,又會(huì)從后臺(tái)進(jìn)入前臺(tái)。
小程序的頁(yè)面生命周期函數(shù)
小程序的頁(yè)面生命周期函數(shù)需要在頁(yè)面.js 中進(jìn)行聲明。如:
Page({
/**
* 頁(yè)面的初始數(shù)據(jù)
*/
data: {
},
/**
* 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載
*/
onLoad(options) {
console.log('本地生活頁(yè)面加載完畢');
},
/**
* 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面初次渲染完成
*/
onReady() {
console.log("初次渲染完畢!");
},
/**
* 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面顯示
*/
onShow() {
console.log("頁(yè)面顯示完成");
},
/**
* 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面隱藏
*/
onHide() {
console.log("頁(yè)面已被隱藏!");
},
/**
* 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面卸載
*/
onUnload() {
console.log("GG");
},
/**
* 頁(yè)面相關(guān)事件處理函數(shù)--監(jiān)聽(tīng)用戶下拉動(dòng)作
*/
onPullDownRefresh() {
console.log('正在刷新!');
},
/**
* 頁(yè)面上拉觸底事件的處理函數(shù)
*/
onReachBottom() {
console.log('正在加載更多!');
},
/**
* 用戶點(diǎn)擊右上角分享
*/
onShareAppMessage() {
console.log('用戶正在分享!');
}
})
- 小程序注冊(cè)完成后,加載頁(yè)面,觸發(fā)onLoad方法。
- 頁(yè)面載入后觸發(fā)onShow方法,顯示頁(yè)面。
- 首次顯示頁(yè)面,會(huì)觸發(fā)onReady方法,渲染頁(yè)面元素和樣式,一個(gè)頁(yè)面只會(huì)調(diào)用一次。
- 當(dāng)小程序后臺(tái)運(yùn)行或跳轉(zhuǎn)到其他頁(yè)面時(shí),觸發(fā)onHide方法。
- 當(dāng)小程序有后臺(tái)進(jìn)入到前臺(tái)運(yùn)行或重新進(jìn)入頁(yè)面時(shí),觸發(fā)onShow方法。
- 當(dāng)使用重定向方法wx.redirectTo(OBJECT)或關(guān)閉當(dāng)前頁(yè)返回上一頁(yè)wx.navigateBack(),觸發(fā)onUnload。
| 函數(shù) | 說(shuō)明 | 作用 |
|---|---|---|
| onLoad | 生命周期回調(diào)—監(jiān)聽(tīng)頁(yè)面加載 | 發(fā)送請(qǐng)求獲取數(shù)據(jù) |
| onShow | 生命周期回調(diào)—監(jiān)聽(tīng)頁(yè)面顯示 | 請(qǐng)求數(shù)據(jù) |
| onReady | 生命周期回調(diào)—監(jiān)聽(tīng)頁(yè)面初次渲染完成 | 獲取頁(yè)面元素(少用) |
| onHide | 生命周期回調(diào)—監(jiān)聽(tīng)頁(yè)面隱藏 | 終止任務(wù),如定時(shí)器或者播放音樂(lè) |
| onUnload | 生命周期回調(diào)—監(jiān)聽(tīng)頁(yè)面卸載 | 終止任務(wù) |

- 小程序初始化完成后,頁(yè)面首次加載觸發(fā)onLoad,只會(huì)觸發(fā)一次。
- 當(dāng)小程序進(jìn)入到后臺(tái),先執(zhí)行頁(yè)面onHide方法再執(zhí)行應(yīng)用onHide方法。
- 當(dāng)小程序從后臺(tái)進(jìn)入到前臺(tái),先執(zhí)行應(yīng)用onShow方法再執(zhí)行頁(yè)面onShow方法。
實(shí)例演示:

監(jiān)聽(tīng)事件:

到此這篇關(guān)于微信小程序應(yīng)用和頁(yè)面生命周期的文章就介紹到這了,更多相關(guān)小程序應(yīng)用和頁(yè)面生命周期內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript簡(jiǎn)單性能問(wèn)題及學(xué)習(xí)筆記
最近在看一本書:《高性能javaScript》,發(fā)現(xiàn)自己平時(shí)寫js存在很多小細(xì)節(jié)上的問(wèn)題,雖然這些問(wèn)題不會(huì)導(dǎo)致程序運(yùn)行出錯(cuò),但是會(huì)導(dǎo)致界面加載變慢,用戶體驗(yàn)變差,那么我們就來(lái)細(xì)細(xì)數(shù)一下應(yīng)該注意的地方吧2014-02-02
js如何判斷用戶是在PC端和還是移動(dòng)端訪問(wèn)
這篇文章主要介紹了js如何判斷用戶是在PC端和還是移動(dòng)端訪問(wèn),需要的朋友可以參考下2014-04-04
innerHTML動(dòng)態(tài)添加html代碼和腳本兼容多個(gè)瀏覽器
innerHTML動(dòng)態(tài)添加html代碼和腳本,給某個(gè)元素的innerHTML賦值,并使得值中的js代碼有效且兼容多個(gè)瀏覽器,很棒的一個(gè)方法2014-10-10
JS,Jquery獲取select,dropdownlist,checkbox下拉列表框的值(示例代碼)
本篇文章主要是對(duì)JS,Jquery獲取select,dropdownlist,checkbox下拉列表框的值(示例代碼)進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01
JS實(shí)現(xiàn)帶有3D立體感的銀灰色豎排折疊菜單代碼
這篇文章主要介紹了JS實(shí)現(xiàn)帶有3D立體感的銀灰色豎排折疊菜單代碼,可實(shí)現(xiàn)基本的JS響應(yīng)鼠標(biāo)事件動(dòng)態(tài)展開(kāi)與折疊菜單欄的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
js 發(fā)個(gè)判斷字符串是否為符合標(biāo)準(zhǔn)的函數(shù)
判斷字符是不是ip和是不是數(shù)字的函數(shù)。2009-04-04
JS實(shí)現(xiàn)根據(jù)指定值刪除數(shù)組中的元素操作示例
這篇文章主要介紹了JS實(shí)現(xiàn)根據(jù)指定值刪除數(shù)組中的元素操作,結(jié)合實(shí)例形式總結(jié)分析了JavaScript針對(duì)數(shù)組元素刪除操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-08-08

