1、應(yīng)用生命周期
- 應(yīng)用生命周期書(shū)寫(xiě)在
app.js
文件中 -
onLaunch
小程序第一次啟動(dòng)時(shí)觸發(fā)卒蘸。應(yīng)用場(chǎng)景:用戶首次進(jìn)入獲取用戶信息雌隅,及權(quán)限 -
onShow
小程序首次顯示時(shí),或小程序與其他應(yīng)用切換顯隱時(shí)觸發(fā)缸沃。應(yīng)用場(chǎng)景:小程序重新顯示時(shí)恰起,重置數(shù)據(jù)或頁(yè)面效果 -
onHide
小程序與其他應(yīng)用切換顯隱時(shí)觸發(fā)。應(yīng)用場(chǎng)景:當(dāng)小程序隱藏時(shí)趾牧,關(guān)閉或暫停一些定時(shí)操作 -
onError
小程序代碼出現(xiàn)錯(cuò)誤時(shí)觸發(fā)检盼。應(yīng)用場(chǎng)景:錯(cuò)誤觸發(fā)時(shí),將錯(cuò)誤發(fā)送到后臺(tái)進(jìn)行記錄跟蹤 -
onPageNotFound
小程序首頁(yè)找不到時(shí)觸發(fā)翘单。應(yīng)用場(chǎng)景:找不到首頁(yè)時(shí)吨枉,跳轉(zhuǎn)到其他頁(yè)面 -
onThemeChange
微信系統(tǒng)切換主題時(shí)觸發(fā),默認(rèn)入?yún)?code>theme屬性哄芜,取值為dark
或light
// app.js
App({
//小程序第一次啟動(dòng)時(shí)觸發(fā)貌亭,此處可用于獲取用戶信息
//應(yīng)用場(chǎng)景:獲取用戶信息,登錄校驗(yàn)
onLaunch(){
console.log('onLaunch')
},
//小程序顯示時(shí)觸發(fā),切換應(yīng)用顯隱時(shí)可觸發(fā)
//應(yīng)用場(chǎng)景:重置應(yīng)用的數(shù)據(jù)或頁(yè)頁(yè)面效果
onShow() {
console.log('onShow')
},
//小程序被隱藏時(shí)觸發(fā)
//應(yīng)用場(chǎng)景:定時(shí)器控制
onHide(){
console.log('onHide')
},
//小程序代碼報(bào)錯(cuò)時(shí)觸發(fā)
//應(yīng)用場(chǎng)景:收集應(yīng)用錯(cuò)誤信息认臊,傳給后臺(tái)
onError(err){
console.log('onError')
console.log(err)
},
//首頁(yè)找不到時(shí)觸發(fā)
//應(yīng)用場(chǎng)景:首頁(yè)不存在時(shí)圃庭,可執(zhí)行跳轉(zhuǎn)到其他頁(yè)面
onPageNotFound(){
wx.navigateTo({
url: '/pages/btn/btn',
})
console.log('onPageNotFound')
},
//未處理的promise拒絕事件監(jiān)聽(tīng)函數(shù),當(dāng)前不支持android
onUnhandledRejection(res){
console.log('onUnhandledRejection')
// res.reason//error對(duì)象
// res.promise//被拒絕的promise
},
//系統(tǒng)切換主題時(shí)觸發(fā)
//默認(rèn)入?yún)⒅邪瑃heme,取值為'dark','light'
onThemeChange(param){
console.log(onThemeChange)
}
})
2、頁(yè)面生命周期
-
onLoad
頁(yè)面加載時(shí)觸發(fā),只會(huì)調(diào)用一次,函數(shù)入?yún)⒅锌色@取頁(yè)面路徑中的參數(shù)剧腻。
應(yīng)用場(chǎng)景:發(fā)送異步請(qǐng)求斟薇,初始化頁(yè)面數(shù)據(jù),獲取頁(yè)面?zhèn)鲄?/code>
示例:
onLoad(query){
console.log('onLoad')
console.log(query)
}
-onShow
頁(yè)面顯示時(shí)觸發(fā)
onShow(){
console.log("page-onShow")
}
onReady
頁(yè)面初次渲染完成后觸發(fā),只會(huì)調(diào)用一次恕酸。
對(duì)界面內(nèi)容進(jìn)行修改的api需在onready
之后進(jìn)行onHide
頁(yè)面從前臺(tái)轉(zhuǎn)為后臺(tái)時(shí)觸發(fā)onUnload
頁(yè)面銷毀時(shí)觸發(fā)onPullDownRefresh
下拉刷新時(shí)觸發(fā)。
需要在app.json
的window
選項(xiàng)中或頁(yè)面配置中開(kāi)啟enablePullDownRefresh
胯陋。
可以通過(guò)wx.startPullDownRefresh
觸發(fā)下拉刷新蕊温,調(diào)用后觸發(fā)下拉刷新動(dòng)畫(huà),效果與用戶手動(dòng)下拉刷新一致遏乔。
當(dāng)處理完數(shù)據(jù)刷新后义矛,wx.stopPullDownRefresh
可以停止當(dāng)前頁(yè)面的下拉刷新。onReachBottom
上拉加載時(shí)觸發(fā)盟萨×狗可以在app.json
的window
選項(xiàng)中或頁(yè)面配置中設(shè)置觸發(fā)距離onReachBottomDistance
。onShareAppMessage
監(jiān)聽(tīng)“發(fā)送給朋友”按鈕的行為捻激。
只有定義了onShareAppMessage
函數(shù)制轰,彈窗中才會(huì)有發(fā)送給朋友
按鈕
函數(shù)默認(rèn)入?yún)橐粋€(gè)對(duì)象
{
from:"button",//轉(zhuǎn)發(fā)事件來(lái)源,button 或 menu
target:Object,//from為button時(shí)胞谭,target指向button垃杖,否則為undefined
webViewUrl:'',//如果有嵌入頁(yè)面,則為嵌入頁(yè)面的url
}
該函數(shù)需return一個(gè)Object
{
title:'轉(zhuǎn)發(fā)標(biāo)題',
path:'轉(zhuǎn)發(fā)路徑',
imageUrl:'自定義圖片路徑'
}
onShareAppMessage(res){
console.log('onShareAppMessage')
if (res.from === 'button') {
// 來(lái)自頁(yè)面內(nèi)轉(zhuǎn)發(fā)按鈕
console.log(res.target)
}
return {
title: '自定義轉(zhuǎn)發(fā)標(biāo)題',
path: '/page/user?id=123'
}
}
-
onAddToFavorites
點(diǎn)擊收藏時(shí)觸發(fā)丈屹,當(dāng)前頁(yè)面內(nèi)若含有嵌入頁(yè)面调俘,則默認(rèn)入?yún)⒅蟹祷豟``webViewUrl``。
此函數(shù)需要return一個(gè)Object旺垒。用于設(shè)置收藏時(shí)的標(biāo)題彩库、圖片、及query傳參
{
title:'收藏標(biāo)題',
imageUrl:'http://demo.png',
query:'name=xxx&age=xx'
}
示例:
onAddToFavorites(res){
console.log("onAddToFavorites")
console.log('webViewUrl: ', res.webViewUrl)
return {
title: '自定義標(biāo)題',
imageUrl: 'http://demo.png',
query: 'name=xxx&age=xxx',
}
}
-
onShareTimeline
監(jiān)聽(tīng)分享到朋友圈
按鈕的行為,當(dāng)前處于beta階段先蒋,僅支持android
系統(tǒng)(2021-03-23
)骇钦,只有定義了onShareTimeline
,彈窗中才會(huì)顯示分享到朋友圈
按鈕。此函數(shù)需return一個(gè)object,用于定義自定義分享內(nèi)容
{
title:'朋友圈列表頁(yè)上顯示標(biāo)題',
query:'自定義頁(yè)面路徑中攜帶的參數(shù)',
imageUrl:'自定義圖片路徑'
}
示例:
onShareTimeline(){
console.log("onShareTimeline")
return {
title:'朋友圈列表頁(yè)上顯示標(biāo)題',
query:'自定義頁(yè)面路徑中攜帶的參數(shù)',
imageUrl:'自定義圖片路徑'
}
}
-
onResize
頁(yè)面尺寸發(fā)生變化時(shí)觸發(fā),指小程序發(fā)生橫縱屏切換時(shí)會(huì)觸發(fā)
使小程序屏幕可以翻轉(zhuǎn)竞漾,需在json文件中設(shè)置屬性:
{
"pageOrientation":"auto"
}
示例:
onResize(){
console.log('onResize')
},
-
onPageScroll
頁(yè)面滾動(dòng)時(shí)觸發(fā) -
onTabItemTap
tab頁(yè)中點(diǎn)擊自己時(shí)才會(huì)觸發(fā)
函數(shù)默認(rèn)入?yún)椋?/li>
{
index:'tabItem序號(hào)',
pagePath:'tabItem的頁(yè)面路徑',
text:'tabItem的按鈕文字'
}
示例:
onTabItemTap(tab){
console.log('onTabItemTap')
console.log(tab.index)
console.log(tab.pagePath)
console.log(tab.text)
}
3司忱、組件生命周期
- 組件中的生命周期寫(xiě)在
lifetimes
中 -
created
組件剛剛被創(chuàng)建時(shí)觸發(fā),不可使用setData
畴蹭,常用于給組件this
添加自定義屬性字段 -
attached
組件初始化完畢后觸發(fā)坦仍,絕大多數(shù)初始化工作此處進(jìn)行 -
ready
在組件在視圖層布局完成后執(zhí)行,個(gè)人理解類似于vue中的mounted
-
moved
在組件實(shí)例被移動(dòng)到節(jié)點(diǎn)樹(shù)另一個(gè)位置時(shí)執(zhí)行 -
detached
組件銷毀時(shí)觸發(fā) ,類vue中的destroyed
-
error
每當(dāng)組件方法拋出錯(cuò)誤時(shí)執(zhí)行
示例:
lifetimes: {
attached: function() {
// 在組件實(shí)例進(jìn)入頁(yè)面節(jié)點(diǎn)樹(shù)時(shí)執(zhí)行
},
detached: function() {
// 在組件實(shí)例被從頁(yè)面節(jié)點(diǎn)樹(shù)移除時(shí)執(zhí)行
},
}
4叨襟、組件所在頁(yè)面的生命周期
-
show
組件所在的頁(yè)面被展示時(shí)執(zhí)行 -
hide
組件所在的頁(yè)面被隱藏時(shí)執(zhí)行 -
resize
組件所在的頁(yè)面尺寸變化時(shí)執(zhí)行
Component({
pageLifetimes: {
show: function() {
// 頁(yè)面被展示
},
hide: function() {
// 頁(yè)面被隱藏
},
resize: function(size) {
// 頁(yè)面尺寸變化
}
}
})