原理
mpVue是使用vue.js來開發小程式的一個前端框架。框架基於vue.js核心,改寫了vue.js的runtime和compiler實現,使其可以執行在小程式環境中。
mpvue
保留了 vue.runtime 核心方法,無縫繼承了Vue.js
的基礎能力mpvue-template-compiler
提供了將 vue 的模板語法轉換到小程式的 wxml 語法的能力- 修改了 vue 的建構配置,使之構建出符合小程式專案結構的程式碼格式: json/wxml/wxss/js 檔案
好處
使用 mpvue
開發小程式,你將在相比開發原生小程式技術體系的基礎上獲取到這樣一些能力:
- 徹底的元件化開發能力:提高程式碼複用性 【比較大的一個好處是構建元件方便很多】
- 完整的
Vue.js
開發體驗 【對於本來熟悉vue.js的開發者來說會更容易上手】 - 方便的
Vuex
資料管理方案:方便構建複雜應用 【這個其實跟小程式原生的globalData有點相類似,筆者覺得globalData或者setStorage()可能更好用】 - 快捷的
webpack
構建機制:自定義構建策略、開發階段 hotReload - 支援使用 npm 外部依賴 【目前有很多外掛都沒有小程式版本的,用npm依賴還是比較方便的,但是要注意可能支援性不一定很好】
- 使用
Vue.js
命令列工具 vue-cli 快速初始化專案 【小程式本身的初始化專案也比較快】 - H5 程式碼轉換編譯成小程式目的碼的能力
- 可以使用sass,less等css擴充套件語言,提高樣式書寫效率
生命週期
1、原生小程式生命週期
App()
onLaunch | Function | 生命週期函式--監聽小程式初始化 | 當小程式初始化完成時,會觸發 onLaunch(全域性只觸發一次) |
onShow | Function | 生命週期函式--監聽小程式顯示 | 當小程式啟動,或從後臺進入前臺顯示,會觸發 onShow |
onHide | Function | 生命週期函式--監聽小程式隱藏 | 當小程式從前臺進入後臺,會觸發 onHide |
onError | Function | 錯誤監聽函式 | 當小程式發生指令碼錯誤,或者 api 呼叫失敗時,會觸發 onError 並帶上錯誤資訊 |
onPageNotFound | Function | 頁面不存在監聽函式 | 當小程式出現要開啟的頁面不存在的情況,會帶上頁面資訊回撥該函式,詳見下文 |
其他 | Any | 開發者可以新增任意的函式或資料到 Object 引數中,用 this 可以訪問 |
全域性的 getApp()
函式可以用來獲取到小程式例項。
// other.js
var app= getApp()
console.log(app.globalData) // I am global data複製程式碼
Page()
函式用來註冊一個頁面。接受一個 object 引數,其指定頁面的初始資料、生命週期函式、事件處理函式等。
object 引數說明:
屬性 | 型別 | 描述 |
---|---|---|
data | Object | 頁面的初始資料 |
onLoad | Function | 生命週期函式--監聽頁面載入 |
onReady | Function | 生命週期函式--監聽頁面初次渲染完成 |
onShow | Function | 生命週期函式--監聽頁面顯示 |
onHide | Function | 生命週期函式--監聽頁面隱藏 |
onUnload | Function | 生命週期函式--監聽頁面解除安裝 |
onPullDownRefresh | Function | 頁面相關事件處理函式--監聽使用者下拉動作 |
onReachBottom | Function | 頁面上拉觸底事件的處理函式 |
onShareAppMessage | Function | 使用者點選右上角轉發 |
onPageScroll | Function | 頁面滾動觸發事件的處理函式 |
onTabItemTap | Function | 當前是 tab 頁時,點選 tab 時觸發 |
其他 | Any | 開發者可以新增任意的函式或資料到 object 引數中,在頁面的函式中用 this 可以訪問 |
3、mpVue的生命週期
同 vue,不同的是我們會在小程式 onReady 後,再去觸發 vue mounted 生命週期
- beforeCreate
- created
- beforeMount
- mounted
- beforeUpdate
- updated
- activated
- deactivated
- beforeDestroy
- destroyed
除了 Vue 本身的生命週期外,mpvue 還相容了小程式生命週期,這部分生命週期鉤子的來源於微信小程式的 Page, 除特殊情況外,不建議使用小程式的生命週期鉤子。
注意點:
不要在選項屬性或回撥上使用箭頭函式,比如
created: () => console.log(this.a)
或vm.$watch('a', newValue => this.myMethod())
。因為箭頭函式是和父級上下文繫結在一起的,this
不會是如你做預期的 Vue 例項,且this.a
或this.myMethod
也會是未定義的。微信小程式的頁面的
query
引數是通過onLoad
獲取的,mpvue 對此進行了優化,直接通過this.$root.$mp.query
獲取相應的引數資料,其呼叫需要在onLoad
生命週期觸發之後使用,比如onShow
等