小程序學習(三)小程序邏輯層之注冊程序和場景值
之前學習了小程序的基本架構和文件的類型,然后再參照官方的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
通過這些場景值,可以方便我們統計小程序訪問的來源。在后面針對某些功能做營銷時,能夠輕松的獲得有價值的數據。