從上篇文章中,我們了解:小程序主要由兩個部分構(gòu)成,app和page。
app,就是小程序的框架。支撐pages,邏輯層的調(diào)用,對數(shù)據(jù),wxss,wxml的解析;
page,主要是業(yè)務(wù)層,用于實(shí)現(xiàn)界面化操作功能,是程序員使用頻率最高的部分。
本篇文章簡單介紹 App() 和 Page()函數(shù);
詳細(xì)的可以參數(shù)微信小程序api文檔。
一,App()
用來注冊一個小程序。在小程序啟動的時候調(diào)用,并創(chuàng)建小程序,直到銷毀。在整個小程序的生命周期過程中,它都是存在的。很顯然它是單例的,全局的。所以,
1)只能在app.js中注冊一次。
2)在代碼的任何地方都可以通過 getApp() 獲取這個唯一的小程序單例,
比如 var appInstance = getApp();
App()的參數(shù)是 object 類型 {} ,指定了小程序的聲明周期函數(shù)。
onLaunch 函數(shù)
監(jiān)聽小程序初始化。
當(dāng)小程序初始化完成時,會觸發(fā) onLaunch(全局只觸發(fā)一次)。
onShow 函數(shù)
監(jiān)聽小程序顯示。
當(dāng)小程序啟動,或從后臺進(jìn)入前臺顯示,會觸發(fā)。
onHide 函數(shù)
監(jiān)聽小程序隱藏。
當(dāng)小程序從前臺進(jìn)入后臺,會觸發(fā)。
所謂前后臺的定義,類似于手機(jī)上的app,比如當(dāng)不在使用微信時,就進(jìn)入了后臺。
globalData 對象
全局?jǐn)?shù)據(jù)。
代碼和日志參考,如下動圖:

二、Page()
通過App()注冊完成小程序之后,框架就開始注冊頁面。所以不要在App()的 onLaunch 中調(diào)用 getCurrentPage() 方法,因?yàn)榇藭r頁面還沒有注冊完成。
同樣的Page()也是有生命周期的。當(dāng)頁面注冊完成之后,可以在 page.js 文件中調(diào)用 getCurrentPage() 方法,獲取當(dāng)前頁面對象。
2.1,Page()的參數(shù)也是Object類型。
onLoad
監(jiān)聽頁面加載
頁面剛開始加載的時候觸發(fā)。只會調(diào)用一次。
onReady
監(jiān)聽頁面初次渲染完成
類似于html的 onReady。只會調(diào)用一次。
onShow
監(jiān)聽頁面顯示
頁面顯示的時候觸發(fā),比如頁面切換
onHide
監(jiān)聽頁面隱藏
和onShow對應(yīng)
onUnload
監(jiān)聽頁面卸載
在 redirectTo 或 navigateBack 的時候調(diào)用
onPullDownRefresh
監(jiān)聽用戶下拉動
1)需要在config的window選項(xiàng)中開啟enablePullDownRefresh。
2)當(dāng)處理完數(shù)據(jù)刷新后,wx.stopPullDownRefresh 可以停止當(dāng)前頁面的下拉刷新。
onReachBottom
頁面上拉觸底事件的處理函數(shù)
data
頁面的初始數(shù)據(jù)
2.2,Page.prototype.setData()
Page的函數(shù) setData() 用于頁面初始數(shù)據(jù)data的修改。如果該數(shù)據(jù)綁定到了視圖層wxml中展示,那么無須刷新,視圖層就會反映出修改。
對于data的修改,只能使用 setData() ,不能直接通過 this.data 進(jìn)行修改。數(shù)據(jù)量限制在 1024 kb以內(nèi)。
2.3,getCurrentPages()
,獲取當(dāng)前頁面棧的實(shí)例,以數(shù)組形式按棧的順序給出,第一個元素為首頁,最后一個元素為當(dāng)前頁面。
2.4,案例動圖

三、頁面棧
框架以棧的形式維護(hù)了當(dāng)前的所有頁面。 當(dāng)發(fā)生路由切換的時候,頁面棧的表現(xiàn)如下:
路由方式 | 頁面棧表現(xiàn) |
初始化 | 新頁面入棧 |
打開新頁面 | 新頁面入棧 |
頁面重定向 | 當(dāng)前頁面出棧, 新頁面入棧 |
頁面返回 | 頁面不斷出棧,直到目標(biāo)返回頁面, 新頁面入棧 |
Tab 切換 | 當(dāng)前頁面出棧, 新頁面入棧 |
四、生命周期
下圖說明了 Page 實(shí)例的生命周期。

五,頁面路由
路由方式 | 路由后頁面 | 路由前頁面 |
初始化 | onLoad, onShow |
|
打開新頁面 | onLoad, onShow | onHide |
頁面重定向 | onLoad, onShow | onUnload |
頁面返回 | onShow | onUnload(多層頁面返回每個頁面都會按順序觸發(fā)onUnload) |
Tab 切換 | 第一次打開 onLoad,onshow; 否則 onShow | onHide
|