天天看點

實作一個迷你版的vue

項目位址

Vue1和Vue2的差別

其實Vue1和Vue2最大的差別就是Vue2多了一個虛拟DOM,其他的差別都是很小的。是以了解了Vue1的源碼,就相當于了解了Vue2,中間差了一個虛拟DOM的Diff算法

文檔

  • 資料雙向綁定
  • Vue主流程走向
  • 元件
  • nextTick異步更新

MVVM

先來科普一下MVVM的概念及原理

配套插件

mini-vuex

實作一個迷你版的vue

實作的功能

全局方法

// 繼承MiniVue 産生一個新的子類構造函數
MiniVue.extend
// 在執行個體化過程完成後運作
MiniVue.nextTick
// 注冊自定義指令
MiniVue.directive
// 過濾器
MiniVue.filter 
// 元件 包括slot props
MiniVue.component
// 插件
MiniVue.use
// 混入
MiniVue.mixin
           

mixin filter component也可以局部注冊 在new一個執行個體時提供以下選項即可

filters
components
mixin
           

執行個體方法

vm.$watch
vm.$set
vm.$delete
vm.$on
vm.$once
vm.$off
vm.$emit
vm.$nextTick
           

指令

v-text
v-html
v-show
v-if
v-else
v-for
v-on
v-bind
v-model
           

計算屬性

計算屬性用法也和Vue一樣

生命周期

init
created
beforeCompiled
compiled
destroyed
           

以上實作的功能用法和Vue一模一樣

如何閱讀源碼

閱讀源碼要帶有目的去看 不能毫無目的的去看源碼 以免掉進無盡的細節陷阱中而出不來

Vue源碼要怎麼看呢

建議從一個Vue執行個體化的過程開始 一直跟蹤這條主線 直到結尾為止(一定要打斷點 debugger 我打了100多個斷點才看懂主流程) 各種分枝暫時不要管 等把主線了解清楚了 細枝末節自然不在話下

Vue1.0子產品

在Vue主線裡和資料雙向綁定有關的有以下幾個子產品

  • Vue構造函數
  • 觀察者observer
  • 觀察者watcher
  • 指令系統 directive類和directives指令函數集合
  • DOM解析compile
  • watcher與observer之間的聯系者dep

我們來看看他們之間的關系

實作一個迷你版的vue

如果不是想自己實作一個mvvm架構 Vue的源碼不用細讀 隻要明白主線的運作過程就行了 想要熟練使用Vue看官方文檔即可

想了解主線流程的 可以看看我的v0.1版本 300行代碼 完整的實作了雙向資料綁定的流程 還有3條指令的實作過程 其實其他的指令即使沒實作 也沒什麼關系 主流程明白即可

MiniVue v0.1

學習Vue源碼推薦看這篇文章

繼續閱讀