App 代表頂層應用,管理所有頁面和全域資料,並提供生命週期方法。它也是一個構造方法,產生 App 執行個體。一個小程式就是一個 App 執行個體。
簡介
每個小程式的頂層一般包含三個檔案:
app.acss:應用樣式(可選)app.js:應用邏輯app.json:應用配置
下面是一個簡單的 app.json:
{
"pages": [
"pages/index/index",
"pages/logs/index"
],
"window": {
"defaultTitle": "Demo"
}
}在上述配置中,指定了小程式包含兩個頁面,以及應用視窗的預設標題是 Demo。
App 提供四個事件,可以設定鉤子方法:
onLaunch:小程式啟動onShow:小程式切換到前台onHide:小程式切換到後台onError:小程式出錯
一個簡單的 app.js 代碼如下:
App({
onLaunch(options) {
// 小程式初始化
},
onShow(options) {
// 小程式顯示
},
onHide() {
// 小程式隱藏
},
onError(msg) {
console.log(msg)
},
globalData: {
foo: true,
}
})App()
App() 接受一個 object 作為參數,用來配置小程式的生命週期等。
參數說明:
屬性 | 類型 | 描述 | 觸發時機 |
|---|---|---|---|
onLaunch | Function | 監聽小程式初始化 | 當小程式初始化完成時觸發,全域只觸發一次 |
onShow | Function | 監聽小程式顯示 | 當小程式啟動,或從後台進入前台顯示時觸發 |
onHide | Function | 監聽小程式隱藏 | 當小程式從前台進入後台時觸發 |
onError | Function | 監聽小程式錯誤 | 當小程式發生 js 錯誤時觸發 |
前台、後台定義: 使用者點擊左上方關閉,或者按了裝置 Home 鍵離開 mPaaS 用戶端時,小程式並不會直接銷毀,而是進入了後台,當再次進入 mPaaS 用戶端或再次開啟小程式時,又會從後台進入前台。
只有當小程式進入後台一定時間後,或佔用系統資源過高時,才會被真正銷毀。
onLaunch/onShow 方法的參數
屬性 | 類型 | 描述 |
|---|---|---|
query | Object | 當前小程式的 query |
path | String | 當前小程式的頁面地址 |
Native 啟動傳參方法為:

URL 啟動傳參方法為:
query從啟動參數的query欄位解析而來,path從啟動參數page欄位解析而來。 例如在如下 URL 中:alipays://platformapi/startapp?appId=1999&query=number%3D1&page=x%2Fy%2Fz其中的
query參數解析如下:number%3D1 === encodeURIComponent('number=1')其中的
path參數解析如下:x%2Fy%2Fz === encodeURIComponent('x/y/z')
那麼,當使用者第一次啟動小程式可以從 onLaunch 方法中擷取這個參數,或者小程式在後台時被重新用 schema 開啟也可以從 onShow 方法中擷取這個參數。
App({
onLaunch(options) {
// 第一次開啟
// options.query == {number:1}
},
onShow(options) {
// 從後台被 scheme 重新開啟
// options.query == {number:1}
},
})getApp()
我們提供了全域的 getApp() 函數,可以擷取小程式執行個體,一般用在各個子頁面之中擷取頂層應用。
var app = getApp()
console.log(app.globalData) // 擷取 globalData注意:
App()必須在app.js裡調用,且不能調用多次。不要在定義於
App()內定義的函數中調用getApp(),使用this就可以拿到app執行個體。不要在
onLaunch裡調用getCurrentPages(),這個時候page還沒有產生。通過
getApp()擷取執行個體之後,不要私自調用生命週期函數。
全域的資料可以在 App() 中設定,各個子頁面通過全域函數 getApp() 可以擷取全域的應用執行個體。例如:
// app.js
App({
globalData: 1
})// a.js
// localValue 只在 a.js 有效
var localValue = 'a'
// 產生 app 執行個體
var app = getApp()
// 拿到全域資料,並改變它
app.globalData++// b.js
// localValue 只在 b.js 有效
var localValue = 'b'
// 如果 a.js 先運行,globalData 會返回 2
console.log(getApp().globalData)在上面代碼中,a.js 和 b.js 都聲明了變數 localValue,它們不會互相影響,因為各個指令碼聲明的變數和函數只在該檔案中有效。
app.json
app.json 用於全域配置,決定分頁檔的路徑、視窗表現、設定網路逾時時間、設定多 tab 等。
以下是一個包含了部分配置選項的簡單配置 app.json。
{
"pages": [
"pages/index/index",
"pages/logs/index"
],
"window": {
"defaultTitle": "Demo"
}
}app.json 配置項如下。
檔案 | 類型 | 必填 | 描述 |
|---|---|---|---|
pages | String Array | 是 | 設定頁面路徑 |
window | Object | 否 | 設定預設頁面的視窗表現 |
tabBar | Object | 否 | 設定底部 tab 的表現 |
pages
pages屬性是一個數組,每一項都是字串,用來指定小程式的頁面。每一項代表對應頁面的路徑資訊,數組的第一項代表小程式的首頁。小程式中新增/減少頁面,都需要對 pages數組進行修改。
頁面路徑不需要寫 js 尾碼,架構會自動去載入同名的.json、.js、.axml、.acss檔案。
舉例來說,如果開發目錄為:
pages/
pages/index/index.axml
pages/index/index.js
pages/index/index.acss
pages/logs/logs.axml
pages/logs/logs.js
app.js
app.json
app.acssapp.json就要寫成下面的樣子。
{
"pages":[
"pages/index/index",
"pages/logs/logs"
]
}注意:page 忽略時預設為首頁
window
window屬性用於設定小程式通用的狀態列、導航條、標題、視窗背景色。
子屬性包括 titleBarColor、 defaultTitle、 pullRefresh、 allowsBounceVertical。
檔案 | 類型 | 必填 | 描述 |
|---|---|---|---|
titleBarColor | 十進位 | 否 | 導覽列背景色 |
defaultTitle | String | 否 | 頁面標題 |
pullRefresh | Boolean | 否 | 是否允許下拉重新整理。預設 |
allowsBounceVertical | String(YES/NO) | 否 | 頁面是否支援縱向拽拉超出實際內容。預設 |
樣本如下:
{
"window":{
"defaultTitle": "支付寶介面功能示範"
}
}tabBar
如果你的小程式是一個多 tab 應用(用戶端視窗的底部欄可以切換頁面),那麼可以通過tabBar配置項指定 tab 欄的表現,以及 tab 切換時顯示的對應頁面。
通過頁面跳轉(
my.navigateTo)或者頁面重新導向(my.redirectTo)所到達的頁面,即使它是定義在 tabBar 配置中的頁面,也不會顯示底部的 tab 欄。tabBar的第一個頁面必須是首頁。
tabBar 配置
檔案 | 類型 | 必填 | 描述 |
|---|---|---|---|
textColor | HexColor | 否 | 文字顏色 |
selectedColor | HexColor | 否 | 選中文字顏色 |
backgroundColor | HexColor | 否 | 背景色 |
items | Array | 是 | 每個 tab 配置 |
每個 item 配置
檔案 | 類型 | 必填 | 描述 |
|---|---|---|---|
pagePath | String | 是 | 設定頁面路徑 |
name | String | 是 | 名稱 |
icon | String | 否 | 平常表徵圖路徑 |
activeIcon | String | 否 | 高亮表徵圖路徑 |
icon 推薦大小為 60*60px ,系統會對任意傳入的圖片非等比展開或縮放。
例如
{
"tabBar": {
"textColor": "#dddddd",
"selectedColor": "#49a9ee",
"backgroundColor": "#ffffff",
"items": [
{
"pagePath": "pages/index/index",
"name": "首頁"
},
{
"pagePath": "pages/logs/logs",
"name": "日誌"
}
]
}
}啟動參數
從 native 代碼中開啟小程式時可以帶上 page 和 query 參數,page 用來指定開啟特定頁面的路徑,query 用來帶入參數。
iOS 範例程式碼
NSDictionary *param = @{@"page":@"pages/card/index", @"query":@"own=1&sign=1&code=2452473"}; MPNebulaAdapterInterface startTinyAppWithId:@"1234567891234568" params:param];Android 範例程式碼
Bundle param = new Bundle(); param.putString("page", "pages/card/index"); param.putString("query", "own=1&sign=1&code=2452473"); MPNebula.startApp("1234567891234568",param);