小程序學習(三)小程序邏輯層之注冊程序和場景值
之前學習了小程序的基本架構和文件的類型,然后再參照官方的Dome,對小程序也有了一些了解。下面了解一下小程序框架的邏輯層。
小程序的邏輯層主要包含以下幾個點:
1、注冊程序
2、場景值
3、注冊頁面
4、路由
5、模塊化
6、API
一、注冊程序
App() 函數用來注冊一個小程序。接受一個 object參數,其指定小程序的生命周期函數等。這個在上一篇中有寫到,在全局的 app.js 文件中。
ojbect的常用參數有:
| 屬性 | 類型 | 描述 | 觸發時機 |
| onLaunch | Function | 生命周期函數--監聽小程序初始化 | 當小程序初始化完成時,會觸發 onLaunch(全局只觸發一次) |
| onShow | Function | 生命周期函數--監聽小程序顯示 | 當小程序啟動,或從后台進入前台顯示,會觸發 onShow |
| onHide | Function | 生命周期函數--監聽小程序隱藏 | 當小程序從前台進入后台,會觸發 onHide |
| onError | Function | 錯誤監聽函數 | 當小程序發生腳本錯誤,或者 api 調用失敗時,會觸發 onError 並帶上錯誤信息 |
| 其他 | 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 兩 個函數
onLaunch, onShow 參數:
| 字段 | 類型 | 說明 |
|---|---|---|
| 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會傳遞數據
GetApp()
全局的 getApp() 函數可以用來獲取到小程序實例
// other.js var appInstance = getApp() console.log(appInstance.globalData) // I am global data //在頁面的js文件中,可以獲取小程序的實例,然后通過實例對象獲取定義的全局變量
需要注意幾點:
App()必須在app.js中注冊,且不能注冊多個。- 不要在定義於
App()內的函數中調用getApp(),使用this就可以拿到 app 實例。 - 不要在 onLaunch 的時候調用
getCurrentPages(),此時 page 還沒有生成。 - 通過
getApp()獲取實例之后,不要私自調用生命周期函數。
二、場景值
當前支持的場景值有:
| 場景值ID | 說明 |
|---|---|
| 1001 | 發現欄小程序主入口 |
| 1005 | 頂部搜索框的搜索結果頁 |
| 1006 | 發現欄小程序主入口搜索框的搜索結果頁 |
| 1007 | 單人聊天會話中的小程序消息卡片 |
| 1008 | 群聊會話中的小程序消息卡片 |
| 1011 | 掃描二維碼 |
| 1012 | 長按圖片識別二維碼 |
| 1013 | 手機相冊選取二維碼 |
| 1014 | 小程序模版消息 |
| 1017 | 前往體驗版的入口頁 |
| 1019 | 微信錢包 |
| 1020 | 公眾號 profile 頁相關小程序列表 |
| 1022 | 聊天頂部置頂小程序入口 |
| 1023 | 安卓系統桌面圖標 |
| 1024 | 小程序 profile 頁 |
| 1025 | 掃描一維碼 |
| 1026 | 附近小程序列表 |
| 1027 | 頂部搜索框搜索結果頁“使用過的小程序”列表 |
| 1028 | 我的卡包 |
| 1029 | 卡券詳情頁 |
| 1031 | 長按圖片識別一維碼 |
| 1032 | 手機相冊選取一維碼 |
| 1034 | 微信支付完成頁 |
| 1035 | 公眾號自定義菜單 |
| 1036 | App 分享消息卡片 |
| 1037 | 小程序打開小程序 |
| 1038 | 從另一個小程序返回 |
| 1039 | 搖電視 |
| 1042 | 添加好友搜索框的搜索結果頁 |
| 1043 | 公眾號模板消息 |
| 1044 | 帶 shareTicket 的小程序消息卡片(詳情) |
| 1047 | 掃描小程序碼 |
| 1048 | 長按圖片識別小程序碼 |
| 1049 | 手機相冊選取小程序碼 |
| 1052 | 卡券的適用門店列表 |
| 1053 | 搜一搜的結果頁 |
| 1054 | 頂部搜索框小程序快捷入口 |
| 1056 | 音樂播放器菜單 |
| 1058 | 公眾號文章 |
| 1059 | 體驗版小程序綁定邀請頁 |
| 1064 | 微信連Wifi狀態欄 |
| 1067 | 公眾號文章廣告 |
| 1068 | 附近小程序列表廣告 |
| 1072 | 二維碼收款頁面 |
| 1073 | 客服消息列表下發的小程序消息卡片 |
| 1074 | 公眾號會話下發的小程序消息卡片 |
上面有說到 onLoauch 和 onShow函數,場景值主要是通過這兩個函數來傳遞。
其中只有在傳遞 1020、1035、1036、1037、1038、1043 這幾個場景值時,才會返回referrerInfo.appId
通過這些場景值,可以方便我們統計小程序訪問的來源。在后面針對某些功能做營銷時,能夠輕松的獲得有價值的數據。
