mpvue小程序生命週期詳解

mpvue繼承自Vue.js,其技術規範和語法特點與 Vue.js保持一致,所以具備vue知識儲備的同學用mpvue開發小程序很快就能上手。我覺得mpvue比較容易混淆的就是生命週期,mpvue除了Vue 本身的生命週期外,還兼容了小程序的生命週期,接下來就通過實例講解一下生命週期的執行順序。

一、生命週期分三個部分

app生命週期+vue生命週期+小程序自有生命週期,所以我會把這三個類型的生命週期通過console打印出來,通過page-app、page-index、page-user區分不同頁面。

①在app.vue頁面,打印app級別生命週期

②在首頁打印vue生命週期和小程序自有生命週期

③個人中心頁也是一樣打印

二、通過打印信息,看執行順序

①初次加載頁面進入首頁時的生命週期顯示,剛好看到可以分爲三部分

1、首先是app級別的生命週期 onLanunch和onShow(無論後面頁面如何調整,只在app進來只執行一次)

2、所有頁面的beforeCreatre、created  的vue生命週期(也是隻執行一次)

3、進入首頁時的生命週期,小程序生命週期onLoad onShow onReady --->vue生命週期 beforeMount、mount

②那從 首頁 調整到 個人中心頁的生命週期怎麼走?(此次操作是通過tab跳轉)

也是分爲了三部分,具體看圖,需要注意的是 從首頁到個人中心頁面,首頁的destroyed銷燬生命週期並沒有走,所以需要銷燬定時器等耗時任務的放在這個生命週期沒有用。

③還有一些從 個人中心頁返回首頁,或者按home鍵退出再返回的生命週期怎麼走等等,大家可以試一下。

我把生命週期打印的格式貼出來

// vue 生命週期 
beforeCreate () {
	console.log('vue [page-index] beforeCreate')
},
created () { 
	console.log('vue [page-index] created') 
},
beforeMount () { 
	console.log('vue [page-index] beforeMount') 
},
mounted () { 
	console.log('vue [page-index] mounted') 
},
beforeUpdate () { 
	console.log('vue [page-index] beforeUpdate')
},
updated () { 
	console.log('vue [page-index] updated') 
},
activated () { 
	console.log('vue [page-index] activated, mpvue 實際運行並沒有回調, 原因不支持 keep-alive')
},
deactivated () {
	console.log('vue [page-index] deactivated, mpvue 實際運行並沒有回調, 原因不支持 keep-alive') 
},
beforeDestroy () {
	console.log('vue [page-index] beforeDestroy, mpvue 實際運行並沒有回調, bug')
},
destroyed () { 
	console.log('vue [page-index] destroyed, mpvue 實際運行並沒有回調, bug') 
},


//app 部分:

onLaunch () {
	console.log('小程序 [page-index] 生命週期: onLaunch: 初始化') 
},
onShow () {
	console.log('小程序 [page-index] 生命週期: onShow: 當小程序啓動,或從後臺進入前臺顯示') 
},
onHide () {
	console.log('小程序 [page-index] 生命週期: onHide: 當小程序從前臺進入後臺') 
},
// 小程序頁面自有生命週期 
onLoad () {
	console.log('小程序 [page-index] 生命週期: onLoad: 監聽頁面加載') 
},
onShow () {
	console.log('小程序 [page-index] 生命週期: onShow: 監聽頁面顯示') 
},
onReady () { 
	console.log('小程序 [page-index] 生命週期: onReady: 監聽頁面初次渲染完成') },
onHide () { 
	console.log('小程序 [page-index] 生命週期: onHide: 監聽頁面隱藏')
},
onUnload () {
	console.log('小程序 [page-index] 生命週期: onUnload: 監聽頁面卸載') 
},
onPullDownRefresh () {
	console.log('小程序 [page-index] 生命週期: onPullDownRefresh: 監聽用戶下拉動作') 
},
onReachBottom () {
	console.log('小程序 [page-index] 生命週期: onReachBottom: 頁面上拉觸底事件的處理函數') 
},
onShareAppMessage () {
	console.log('小程序 [page-index] 生命週期: onShareAppMessage: 用戶點擊右上角分享')
},
onPageScroll () {
	console.log('小程序 [page-index] 生命週期: onPageScroll: 頁面滾動') 
},
onResize () { 
	console.log('小程序 [page-index] 生命週期: onResize: 寬高改變') 
},
onTabItemTap (item) {
	console.log('小程序 [page-index] 生命週期: onTabItemTap: 當前是 tab 頁時,點擊 tab 時觸發 (mpvue 0.0.16 支持)') 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章