在小程序中 ,通過App()來注冊一個(gè)小程序 ,通過Page()來注冊一個(gè)頁面
先來看一張小程序項(xiàng)目結(jié)構(gòu)
從上圖可以看出,根目錄下面有包含了app.js,app.wxss,app.json三個(gè)文件
這是小程序的全局文件,app.js是小程序邏輯 ,app.json是小程序公共設(shè)置,app.wxss是小程序公共樣式表
在app.js文件中 , 定義了一些生命周期方法 , onLaunch,onShow,onHide,onError,以及任意開發(fā)者添加的函數(shù)或者數(shù)據(jù)(通過this可以訪問)
以下是各個(gè)生命周期方法作用和描述
onLaunch 生命周期函數(shù)--監(jiān)聽小程序初始化 當(dāng)小程序初始化完成時(shí),會(huì)觸發(fā) onLaunch(全局只觸發(fā)一次)
onShow 生命周期函數(shù)--監(jiān)聽小程序顯示 當(dāng)小程序啟動(dòng),或從后臺(tái)進(jìn)入前臺(tái)顯示,會(huì)觸發(fā) onShow
onHide 生命周期函數(shù)--監(jiān)聽小程序隱藏 當(dāng)小程序從前臺(tái)進(jìn)入后臺(tái),會(huì)觸發(fā) onHide
onError 錯(cuò)誤監(jiān)聽函數(shù) 當(dāng)小程序發(fā)生腳本錯(cuò)誤,或者 api 調(diào)用失敗時(shí),會(huì)觸發(fā) onError 并帶上錯(cuò)誤信息
其他 Any 開發(fā)者可以添加任意的函數(shù)或數(shù)據(jù)到 Object 參數(shù)中,用 this 可以訪問
我們在app.js文件中定義以下方法 ,并打印出來
App({
onLaunch: function (options) {
console.log(app.js ---onLaunch--- + JSON.stringify(options));
},
onShow:function(){
console.log(app.js ---onShow---);
},
onHide:function(){
console.log(app.js ---onHide---);
},
onError: function (msg){
console.log(app.js ---onError--- + msg);
},
globalData: {
userInfo: null }
})
這是我們打開一個(gè)小程序打印出來的一些方法
可以看出, 打開程序依次執(zhí)行了app.js下面onLaunch和onShow方法,以及page頁面中的onLoad,onShow和onReady方法
其中 , onLaunch, onShow 方法會(huì)返回一個(gè)參數(shù)對象, 里面包含了三個(gè)參數(shù) , path,query和scene ,path是打開小程序的路徑
query是打開小程序頁面url的參數(shù),scene是打開小程序的場景值
小程序切換到后臺(tái)會(huì)執(zhí)行以下2個(gè)方法
返回小程序前臺(tái)
在page頁面中定義的生命周期方法
onLoad 生命周期函數(shù)--監(jiān)聽頁面加載
onReady 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
onShow 生命周期函數(shù)--監(jiān)聽頁面顯示
onHide 生命周期函數(shù)--監(jiān)聽頁面隱藏
onUnload 生命周期函數(shù)--監(jiān)聽頁面卸載
Page({
onLoad: function (options) {
console.log(page ---onLoad---);
},
onReady: function () {
console.log(page ---onReady---);
},
onShow: function () {
console.log(page ---onShow---);
},
onHide: function () {
console.log(page ---onHide---);
}, onUnload: function () {
console.log(page ---onUnload---); }
})
其中,打開小程序后會(huì)依次執(zhí)行onLoad,onReady和onShow方法
前后臺(tái)切換會(huì)分別執(zhí)行onHide和onShow方法,
當(dāng)小程序頁面銷毀時(shí)會(huì)執(zhí)行 onUnload方法
例如,我們在details.js中定義onUnload方法
onUnload: function () {
console.log(details.js --onUnload)
},
當(dāng)我們從首頁打開一個(gè)新頁面details.wxml,然后再關(guān)閉著這個(gè)頁面
從上圖可以看到頁面執(zhí)行了onUnload方法。
另外, 小程序?yàn)槲覀兲峁┝巳謹(jǐn)?shù)據(jù)管理 ,在page頁面中通過getApp()方法獲取app.js實(shí)例
例如:
我們在app.js通過定義一個(gè)globalData數(shù)據(jù)對象
App({
globalData: {
userInfo: null
}
})
// other.js
var appInstance = getApp()
console.log(appInstance.globalData)
注意:
App() 必須在 app.js 中注冊,且不能注冊多個(gè)。
不要在定義于 App() 內(nèi)的函數(shù)中調(diào)用 getApp() ,使用 this 就可以拿到 app 實(shí)例。
不要在 onLaunch 的時(shí)候調(diào)用 getCurrentPages(),此時(shí) page 還沒有生成。
通過 getApp() 獲取實(shí)例之后,不要私自調(diào)用生命周期函數(shù)。