Page對象
存在於每個頁面的js裏面,Page(Object)函數用來註冊一個頁面。接受一個 Object 類型參數,其指定頁面的初始數據、生命週期回調、事件處理函數等(和app.js裏面東西功能很像)。
數據渲染
data屬性渲染
- 需要放在模板中進行渲染的數據,需要放在Page對象的data屬性中。
- 放到data中的值,只能使用可以JSON序列化的:字符串,數字,布爾值,對象,數組。否則將不會渲染。例如:function。
什麼叫不能序列化的無法渲染呢?比如這個例子:
// pages/QQ/QQ.js
function box()
{
return "我是box返回的"
}
Page({
/**
* 頁面的初始數據
*/
data: {
info:box
},
//...
這種是無法正常執行的。
通過function改變data屬性渲染
- 直接修改 this.data 而不調用 this.setData 是無法改變頁面的狀態的,還會造成數據不一致。
- 其中key可以以數據路徑的形式給出,支持改變數組中的某一項或對象的某個屬性,如 array[2].message,a.b.c.d,並且不需要在 this.data中預先定義。
生命週期函數
頁面內部的js配置。
onLoad(Object query)
等同於app.js的onLaunch(options),只是一個全局一個局部。
onShow(options)
補充一點:5分鐘放在後臺不訪問就自動卸載掉了
調用時機:頁面顯示/切入前臺時觸發。
onReady()
頁面初次渲染完成時觸發。一個頁面只會調用一次,代表頁面已經準備妥當,可以和視圖層進行交互了。
注意和onShow()加載內容的區別:onReady()主要是針對導航欄和tabBar(最上面最下面兩塊)
onUnload()
調用時機:頁面卸載時觸發。如redirectTo或navigateBack到其他頁面時。
具體來說:當進入一個新的頁面時,會將頁面卸載掉,調用onUnload()
// pages/me/me.js
Page({
/**
* 頁面的初始數據
*/
data: {
},
/**
* 生命週期函數--監聽頁面加載
*/
onLoad: function (options) {
console.log("Onload:開始加載初始信息")
},
/**
* 生命週期函數--監聽頁面初次渲染完成
*/
onReady: function () {
console.log("onReady:修改導航欄文字")
},
/**
* 生命週期函數--監聽頁面顯示
*/
onShow: function () {
console.log("onShow:頁面內容開始顯示")
},
/**
* 生命週期函數--監聽頁面隱藏
*/
onHide: function () {
console.log("onHide:進入後臺")
},
/**
* 生命週期函數--監聽頁面卸載
*/
onUnload: function () {
console.log("onUnload:頁面卸載")
},
/**
* 頁面相關事件處理函數--監聽用戶下拉動作
*/
onPullDownRefresh: function () {
},
/**
* 頁面上拉觸底事件的處理函數
*/
onReachBottom: function () {
},
//...
路由
在小程序中所有頁面的路由全部由框架進行管理。getCurrentPages()可以獲取當前狀態下的頁面棧。
即:頁面結構不發生變化,只是內容發生改變。
getCurrentPages()可以理解爲一個數組,裏面是之前走過的頁面,放在數組裏面。
也就是說,getCurrentPages()可以獲取當前狀態下的頁面棧。