mpvue是一款使用Vue.js開發微信小程序的前端框架。使用此框架,開發者將獲得完整的 Vue.js 開發體驗,同時爲H5和小程序提供了代碼複用的能力。
我在前一段時間,學習瞭解並嘗試開發了一個小程序「簡說」,樣式醜了點,代碼有些粗糙,可是做爲先後端分離的font-end項目開發學習,應該有些幫助,有興趣能夠去看看,git地址都在文中。mpvue及koa2全棧開發小程序前端
以上是mpVue的實現原理,vue
更具體點:webpack
mpvue 提供 mpvue 的common方法
mpvue-loader 提供 webpack 版本的加載器
mpvue-webpack-target webpack 構建目標git
mpvue/index.js
將滾動條拉到最後:github
return 一個 Vuew$3
,其實也是一個Vue構造函數,爲了區分,叫作Vue$3web
以後整個文件都是在爲了協調Vue和小程序作 Vue$3 構造函數的 封裝
小程序
小程序實例的類型,可能的值是segmentfault
app.vue
在每一個vue實例掛載的時候,會初始化,將vue實例的屬性同步到小程序對應的實例上。
其中一個屬性mpType
,就是區別app
或 page
的屬性。其實最初的時候,每一個vue實例的mpType
屬性都是undefined,而腳手架生成的項目,會在咱們初始化vue應用的時候,將vue實例的mpType
賦值爲app
,以下:後端
固然,這裏的 import Vue from 'vue'
就是引用的 mpVue,爲了得到更逼真的vue.js體驗,做者使用webpack將其替換了。微信小程序
上面就是不一樣的vue實例類型與小程序的實例上 生命週期的綁定
拉到index.js最下面能夠看到
這是用來同步數據的方法
初始化頁面數據
這裏作了節流 爲了優化大量數據更新
與vue同樣,mpvue也須要跟蹤數據變化,利用watcher,利用發佈訂閱
這是初始化state
這裏將數據送到觀察者
遍歷初始化的state,所有加入到觀察者的隊列
這裏就是數據劫持了,get set
在get中還要引入 watcher
的概念,用來監聽每一個屬性值
在剛剛掛載組件的時候,同時爲該組件的vm
- view-model
建立了一個watcher
也調用了這個Watcher的get原型方法,最重要的一點是,執行了pushTarget方法
,將Watcher賦值給target屬性
從而在get方法中,有了target,將這個watcher加入到 dep的sub子集中
在set方法攔截到數據改變時,通知watcher
wathcer調用update
繼續調用queueWatcher
調用flushSchedulerQueue
通知update鉤子
觸發數據更新
暫時就寫這麼多吧,能力有限,只能很僵硬的翻譯大概的執行流程。但行好事,莫問前程.