上一篇介紹了關於.json 的配置文件,本篇介紹關於.js 邏輯層文件
微信小程序-05-詳解介紹.js 邏輯層文件
文件目錄結構
- 之前大概提高到,沒有細說
- 先打開 app.js 文件
小程序 App
- 打開 app.js 文件,會看到 App({...}) 函數
- App() 函數用來注冊一個小程序。接受一個 Object 參數,其指定小程序的生命周期回調等
- 【注意】:App() 必須在 app.js 中調用,必須調用且只能調用一次。不然會出現無法預期的后果
- Object參數說明:
屬性 |
類型 |
描述 |
觸發時機 |
onLaunch |
Function |
生命周期回調一監聽小程序初始化 |
小程序初始化完成時(全局只觸發一次) |
onShow |
Function |
生命周期回調一監聽小程序顯示 |
小程序啟動,或從后台進入前台顯示時 |
onHide |
Function |
生命周期回調一監聽小程序隱藏 |
小程序從前台進入后台時 |
onError |
Function |
錯誤監聽函數 |
小程序發生腳本錯誤,或者 api 調用失敗時觸發 ,會帶上錯誤信息 |
onPageNotFound |
Function |
頁面不存在監聽函數 |
小程序要打開的頁面不存在時觸發,會帶上頁面信息回調該函數 |
其他 |
Any |
開發者可以添加任意的函數或數據到 Object 參數中,用 this 可以訪問 |
|
- 前台、后台定義:當用戶點擊左上角關閉,或者按了設備 Home 鍵離開微信(也就是返回手機桌面,沒有退出微信),小程序並沒有直接銷毀,而是進入了后台;當再次進入微信或再次打開小程序,又會從后台進入前台。需要注意的是:只有當小程序進入后台一定時間,或者系統占用資源過高,才會真正被銷毀
- 關閉小程序(基礎庫版本1.1.0開始支持):當用戶從掃一掃 ,轉發等入口(場景值(下面有介紹)為1007,1008,1011,1025)進入小程序,且沒有置頂小程序的情況下推出,小程序會被銷毀
- 小程序運行機制在基礎庫版本 1.4.0 有所改變:上一條關閉邏輯在新版已不適用
- 示例代碼:
//提示:當在js文件中輸入app會提示函數,直接回車會直接生產4個框架,快捷
App({
/**
* 當小程序初始化完成時,會觸發 onLaunch(全局只觸發一次)
*/
onLaunch: function () {
},
/**
* 當小程序啟動,或從后台進入前台顯示,會觸發 onShow
*/
onShow: function (options) {
},
/**
* 當小程序從前台進入后台,會觸發 onHide
*/
onHide: function () {
},
/**
* 當小程序發生腳本錯誤,或者 api 調用失敗時,會觸發 onError 並帶上錯誤信息
*/
onError: function (msg) {
}
/**
* 下面是自定義內容
*/
globalData: 'I am global data'
})
詳細介紹.js 文件中App({...})函數各參數
- 上面提到的 5 個參數
- onLaunch,onShow,onHide,onError,onPageNotFound
js 文件中App({...})函數參數 - onLaunch(Object)
- 小程序初始化完成時觸發,全局只觸發一次
- Object 參數說明:
字段 |
類型 |
說明 |
path |
String |
打開小程序的路徑 |
query |
Object |
打開小程序的query |
scene |
Number |
打開小程序的 場景值(下面有介紹) |
shareTicket |
String |
shareTicket,詳見 獲取更多轉發信息(下面有介紹) |
referrerInfo |
Object |
當場景為由從另一個小程序或公眾號或App打開時,返回此字段 |
referrerInfo.appId |
String |
來源小程序或公眾號或App的 appId,詳見下方說明 |
referrerInfo.extraData |
Object |
來源小程序傳過來的數據,scene=1037或1038時支持 |
- 以下場景支持返回 referrerInfo.appId:
場景值 |
場景 |
appId 信息含義 |
1020 |
公眾號 profile 頁相關小程序列表 |
來源公眾號 appId |
1035 |
公眾號自定義菜單 |
來源公眾號 appId |
1036 |
App 分享消息卡片 |
來源應用 appId |
1037 |
小程序打開小程序 |
來源小程序 appId |
1038 |
從另一個小程序返回 |
來源小程序 appId |
1043 |
公眾號模板消息 |
來源公眾號 appId |
js 文件中App({...})函數參數 - onShow(Object)
- 小程序啟動,或從后台進入前台顯示時觸發
- Object 參數說明:
- 與上面 onLaunch 相同
js 文件中App({...})函數參數 - onHide()
js 文件中App({...})函數參數 - onError(String error)
- 小程序發生腳本錯誤,或者 api 調用失敗時觸發
- 參數說明:
名稱 |
類型 |
說明 |
error |
String |
錯誤信息,包含堆棧 |
js 文件中App({...})函數參數 - onPageNotFound(Object)
- 基礎庫 1.9.90 開始支持,低版本需做兼容處理
- 小程序要打開的頁面不存在時觸發
- Object 參數說明:
字段 |
類型 |
說明 |
path |
String |
不存在的頁面路徑 |
query |
Object |
打開不存在的頁面的 query |
isEntryPage |
Boolean |
是否本次啟動的首個頁面(例如從分享等入口進來,首個頁面是開發者配置的分享頁面) |
- 開發者可以在 onPageNotFound 回調中進行重定向處理,但必須在回調中同步處理,異步處理(例如 setTimeout 異步執行)無效
- 示例代碼:
App({
onPageNotFound(res) {
wx.redirectTo({
url: 'pages/...'
}) // 如果是 tabbar 頁面,請使用 wx.switchTab
}
})
- 注意:
- 1.如果開發者沒有添加 onPageNotFound 監聽,當跳轉頁面不存在時,將推入微信客戶端原生的頁面不存在提示頁面
-
- 如果 onPageNotFound 回調中又重定向到另一個不存在的頁面,將推入微信客戶端原生的頁面不存在提示頁面,並且不再回調 onPageNotFound
getApp(Object)
- 全局的 getApp() 函數可以用來獲取到小程序 App 實例
- Object 參數說明:
字段 |
類型 |
說明 |
最低版本 |
allowDefault |
Boolean |
在 App 未定義時返回默認實現。當App被調用時,默認實現中定義的屬性會被覆蓋合並到App中。一般用於[獨立分包](https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages/independent.html) |
2.2.4 |
// 自定義的.js
var appInstance = getApp()
console.log(appInstance.globalData) // I am global data
- 注意:
- 不要在定義於 App() 內的函數中調用 getApp() ,使用 this 就可以拿到 app 實例
- 通過 getApp() 獲取實例之后,不要私自調用生命周期函數
場景值
- 基礎庫 1.1.0 開始支持,低版本需做兼容處理
- 當前支持的場景值有:
場景值ID |
說明 |
1001 |
發現欄小程序主入口,“最近使用”列表(基礎庫2.2.4版本起將包含“我的小程序”列表) |
1005 |
頂部搜索框的搜索結果頁 |
1006 |
發現欄小程序主入口搜索框的搜索結果頁 |
1007 |
單人聊天會話中的小程序消息卡片 |
1008 |
群聊會話中的小程序消息卡片 |
1011 |
掃描二維碼 |
1012 |
長按圖片識別二維碼 |
1013 |
手機相冊選取二維碼 |
1014 |
小程序模版消息 |
1017 |
前往體驗版的入口頁 |
1019 |
微信錢包 |
1020 |
公眾號 profile 頁相關小程序列表 |
1022 |
聊天頂部置頂小程序入口 |
1023 |
安卓系統桌面圖標 |
1024 |
小程序 profile 頁 |
1025 |
掃描一維碼 |
1026 |
附近小程序列表 |
1027 |
頂部搜索框搜索結果頁“使用過的小程序”列表 |
1028 |
我的卡包 |
1029 |
卡券詳情頁 |
1030 |
自動化測試下打開小程序 |
1031 |
長按圖片識別一維碼 |
1032 |
手機相冊選取一維碼 |
1034 |
微信支付完成頁 |
1035 |
公眾號自定義菜單 |
1036 |
App 分享消息卡片 |
1037 |
小程序打開小程序 |
1038 |
從另一個小程序返回 |
1039 |
搖電視 |
1042 |
添加好友搜索框的搜索結果頁 |
1043 |
公眾號模板消息 |
1044 |
帶 shareTicket 的小程序消息卡片 詳情 |
1045 |
朋友圈廣告 |
1046 |
朋友圈廣告詳情頁 |
1047 |
掃描小程序碼 |
1048 |
長按圖片識別小程序碼 |
1049 |
手機相冊選取小程序碼 |
1052 |
卡券的適用門店列表 |
1053 |
搜一搜的結果頁 |
1054 |
頂部搜索框小程序快捷入口 |
1056 |
音樂播放器菜單 |
1057 |
錢包中的銀行卡詳情頁 |
1058 |
公眾號文章 |
1059 |
體驗版小程序綁定邀請頁 |
1064 |
微信連Wi-Fi狀態欄 |
1067 |
公眾號文章廣告 |
1068 |
附近小程序列表廣告 |
1069 |
移動應用 |
1071 |
錢包中的銀行卡列表頁 |
1072 |
二維碼收款頁面 |
1073 |
客服消息列表下發的小程序消息卡片 |
1074 |
公眾號會話下發的小程序消息卡片 |
1077 |
搖周邊 |
1078 |
連Wi-Fi成功頁 |
1079 |
微信游戲中心 |
1081 |
客服消息下發的文字鏈 |
1082 |
公眾號會話下發的文字鏈 |
1084 |
朋友圈廣告原生頁 |
1089 |
微信聊天主界面下拉,“最近使用”欄(基礎庫2.2.4版本起將包含“我的小程序”欄) |
1090 |
長按小程序右上角菜單喚出最近使用歷史 |
1091 |
公眾號文章商品卡片 |
1092 |
城市服務入口 |
1095 |
小程序廣告組件 |
1096 |
聊天記錄 |
1097 |
微信支付簽約頁 |
1099 |
頁面內嵌插件 |
1102 |
公眾號 profile 頁服務預覽 |
1103 |
發現欄小程序主入口,“我的小程序”列表(基礎庫2.2.4版本起該場景值廢棄) |
1104 |
微信聊天主界面下拉,“我的小程序”欄(基礎庫2.2.4版本起該場景值廢棄) |
- 可以在 App 的 onLaunch 和 onShow 中獲取上述場景值,部分場景值下還可以獲取來源應用、公眾號或小程序的appId
-提示:由於Android系統限制,目前還無法獲取到按 Home 鍵退出到桌面,然后從桌面再次進小程序的場景值,對於這種情況,會保留上一次的場景值