1. 程式人生 > >【微信小程式】app.js配置

【微信小程式】app.js配置

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/...'
    })
  }
})

注意:

  1. 微信開發者工具暫不支援 onPageNotFound 除錯,請使用真機除錯
  2. 如果開發者沒有新增 onPageNotFound 監聽,當跳轉頁面不存在時,將推入微信客戶端原生的頁面不存在提示頁面
  3. 如果 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()獲取例項之後,不要私自呼叫生命週期函式。