【微信小程式】app.js配置
阿新 • • 發佈:2018-12-16
App()
函式用來註冊一個小程式。接受一個object引數,其指定小程式的生命週期函式等。
object引數:
屬性 | 型別 | 描述 | 觸發時機 |
---|---|---|---|
onLaunch | Function | 生命週期函式--監聽小程式初始化 | 當小程式初始化完成時,會觸發 onLaunch(全域性只觸發一次) |
onShow | Function | 生命週期函式--監聽小程式顯示 | 當小程式啟動,或從後臺進入前臺顯示,會觸發 onShow |
onHide | Function | 生命週期函式--監聽小程式隱藏 | 當小程式從前臺進入後臺,會觸發 onHide |
onError | Function | 錯誤監聽函式 | 當小程式發生指令碼錯誤,或者 api 呼叫失敗時,會觸發 onError 並帶上錯誤資訊 |
onPageNotFound | Function | 頁面不存在監聽函式 | 當小程式出現要開啟的頁面不存在的情況,會帶上頁面資訊回撥該函式,詳見下文 |
其他 | Any | 開發者可以新增任意的函式或資料到 Object 引數中,用 this 可以訪問 |
前臺、後臺定義:當用戶點選左上角關閉,或者按了裝置 Home 鍵離開微信,小程式並沒有直接銷燬,而是進入了後臺;當再次進入微信或再次開啟小程式,又會從後臺進入前臺。需要注意的是:只有當小程式進入後臺一定時間,或者系統資源佔用過高,才會被真正的銷燬。
關閉小程式(基礎庫版本1.1.0開始支援):當用戶從掃一掃、轉發等入口(場景值為1007, 1008, 1011, 1025)進入小程式,且沒有置頂小程式的情況下退出,小程式會被銷燬。小程式執行機制在基礎庫版本 1.4.0 有所改變:上一條關閉邏輯在新版本已不適用, 詳情
示例程式碼:
App({ onLaunch: function(options) { // Do something initial when launch. }, onShow: function(options) { // Do something when show. }, onHide: function() { // Do something when hide. }, onError: function(msg) { console.log(msg) }, globalData: 'I am global data' })
onLaunch, onShow 引數
欄位 | 型別 | 說明 |
---|---|---|
path | String | 開啟小程式的路徑 |
query | Object | 開啟小程式的query |
scene | Number | 開啟小程式的場景值 |
shareTicket | String | shareTicket,詳見 獲取更多轉發資訊 |
referrerInfo | Object | 當場景為由另一個小程式開啟時,返回此欄位 |
referrerInfo.appId | String | 來源小程式的 appId |
referrerInfo.extraData | Object | 來源小程式傳過來的資料 |
場景值 詳見。
以下場景支援返回 referrerInfo.appId:
場景值 | 場景 | appId 資訊含義 |
---|---|---|
1020 | 公眾號 profile 頁相關小程式列表 | 返回來源公眾號 appId |
1035 | 公眾號自定義選單 | 返回來源公眾號 appId |
1036 | App 分享訊息卡片 | 返回來源應用 appId |
1037 | 小程式開啟小程式 | 返回來源小程式 appId |
1038 | 從另一個小程式返回 | 返回來源小程式 appId |
1043 | 公眾號模板訊息 | 返回來源公眾號 appId |
onPageNotFound
基礎庫 1.9.90 開始支援,低版本需做相容處理
當要開啟的頁面並不存在時,會回撥這個監聽器,並帶上以下資訊:
欄位 | 型別 | 說明 |
---|---|---|
path | String | 不存在頁面的路徑 |
query | Object | 開啟不存在頁面的 query |
isEntryPage | Boolean | 是否本次啟動的首個頁面(例如從分享等入口進來,首個頁面是開發者配置的分享頁面) |
開發者可以在 onPageNotFound 回撥中進行重定向處理,但必須在回撥中同步處理,非同步處理(例如 setTimeout 非同步執行)無效。
示例程式碼:
App({
onPageNotFound(res) {
wx.redirectTo({
url: 'pages/...'
})
}
})
注意:
- 微信開發者工具暫不支援 onPageNotFound 除錯,請使用真機除錯
- 如果開發者沒有新增 onPageNotFound 監聽,當跳轉頁面不存在時,將推入微信客戶端原生的頁面不存在提示頁面
- 如果 onPageNotFound 回撥中又重定向到另一個不存在的頁面,將推入微信客戶端原生的頁面不存在提示頁面,並且不在回撥 onPageNotFound
getApp()
我們提供了全域性的getApp()
函式,可以獲取到小程式例項。
// other.js
var appInstance = getApp()
console.log(appInstance.globalData) // I am global data
注意:
App()
必須在app.js中註冊,且不能註冊多個。不要在定義於
App()
內的函式中呼叫getApp()
,使用this
就可以拿到app例項。不要在onLaunch的時候呼叫
getCurrentPage()
,此時page還沒有生成。通過
getApp()
獲取例項之後,不要私自呼叫生命週期函式。