邏輯層將數據進行處理後發送給視圖層,同時接受視圖層的事件反饋。html
開發者寫的全部代碼最終將會打包成一份 JavaScript
文件,並在小程序啓動的時候運行,直到小程序銷燬。這一行爲相似 ServiceWorker,因此邏輯層也稱之爲 App Service。web
注意:小程序框架的邏輯層並不是運行在瀏覽器中,所以 JavaScript
在 web 中一些能力都沒法使用,如 window
,document
等。小程序
App()
函數用來註冊一個小程序。接受一個 Object
參數,其指定小程序的生命週期回調等。瀏覽器
App() 必須在 app.js
中調用,必須調用且只能調用一次。否則會出現沒法預期的後果。微信
試着在index.js裏面把Page()改爲了App(),報了以下的錯:app
不過這可能只是其中一種狀況。框架
App(Object) ,Object參數說明:異步
前臺、後臺定義: 當用戶點擊左上角關閉,或者按了設備 Home 鍵離開微信,小程序並無直接銷燬,而是進入了後臺;當再次進入微信或再次打開小程序,又會從後臺進入前臺。須要注意的是:只有當小程序進入後臺必定時間,或者系統資源佔用太高,纔會被真正的銷燬。ide
在基礎庫版本 1.4.0以後,小程序啓動會有兩種狀況,一種是「冷啓動」,一種是「熱啓動」。 假如用戶已經打開過某小程序,而後在必定時間內再次打開該小程序,此時無需從新啓動,只需將後臺態的小程序切換到前臺,這個過程就是熱啓動;冷啓動指的是用戶首次打開或小程序被微信主動銷燬後再次打開的狀況,此時小程序須要從新加載啓動。我當前使用的基礎庫是2.0.4 。函數
小程序初始化完成時觸發,全局只觸發一次。
關於onLaunch()、onShow()等的參數設置,參考 https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/app.html
App()
內的函數中調用 getApp()
,使用 this
就能夠拿到 app 實例。getApp()
獲取實例以後,不要私自調用生命週期函數。即操做場景對應的數值,基礎庫 1.1.0 開始支持,低版本需作兼容處理:
能夠在 App
的 onLaunch
和 onShow
中獲取上述場景值,部分場景值下還能夠獲取來源應用、公衆號或小程序的appId,詳見 。感受用來後臺統計數據會用得上。
Tip: 因爲Android系統限制,目前還沒法獲取到按 Home 鍵退出到桌面,而後從桌面再次進小程序的場景值,對於這種狀況,會保留上一次的場景值。
具體參考 場景值。
Page(object),函數用來註冊一個頁面。接受一個 Object
類型參數,其指定頁面的初始數據、生命週期回調、事件處理函數等。
具體參考 註冊頁面
data
是頁面第一次渲染使用的初始數據。參考
頁面加載時觸發。一個頁面只會調用一次,能夠在 onLoad 的參數中獲取打開當前頁面路徑中的參數。
注意:只有定義了此事件處理函數,右上角菜單纔會顯示「轉發」按鈕
Page
中還能夠定義組件事件處理函數。在渲染層的組件中加入事件綁定,當事件被觸發時,就會執行 Page 中定義的事件處理函數。
到當前頁面的路徑,類型爲String
setData
函數用於將數據從邏輯層發送到視圖層(異步),同時改變對應的 this.data
的值(同步)。在方法中使用
getAppInfo: function (e) { var appInfo = getApp().globalData; this.setData({ userInfo:appInfo.userInfo.nickName }) }
在小程序中全部頁面的路由所有由框架進行管理。
框架以棧的形式維護了當前的全部頁面。 當發生路由切換的時候,頁面棧的表現以下:
路由方式 | 頁面棧表現 |
---|---|
初始化 | 新頁面入棧 |
打開新頁面 | 新頁面入棧 |
頁面重定向 | 當前頁面出棧,新頁面入棧 |
頁面返回 | 頁面不斷出棧,直到目標返回頁 |
Tab 切換 | 頁面所有出棧,只留下新的 Tab 頁面 |
重加載 | 頁面所有出棧,只留下新的頁面 |
App.onLaunch
的時候調用 getCurrentPages()
,此時 page
尚未生成。