这是 Vue
发布的第一个版本,实现的功能有: 1. 数据双向绑定 2. 常用指令:v-model
、v-on
、v-show
等等 3. 过滤器
准备
为了方便跟踪代码中的一些逻辑,本人把官方的 Todos
示例改成了 webpack
开发环境,方便在源码中添加断点调试。
1 | git clone git@github.com:liuweiGL/vue-debug-v0.6.0.git |
源码结构
1 | vue-0.6.0\src |
可以看到最初的 Vue
还是比较简单的,下面我们进行每个功能的实现细节分析。
MVVM
总所皆知,MVVM
是当前非常流行的一种软件架构模式,它让我们摆脱 Jquery
的 DOM
面条操作与混乱的事件监听依赖,以数据驱动的方式开发应用。
从图中我们可以看到整个应用分为三个模块:View 视图
、Model 模型
、ViewModel 视图模型
三个模块,其中 View
与 Model
都只跟 ViewModel
模块进行通信:
- 当我们发送一条请求获得新数据时
Model
发生改变,这个时候 $ M \Rightarrow VM \Rightarrow V $,即数据源更改自动更新视图。 - 当用户输入内容时
View
发生改变,这个时候 $ V \Rightarrow VM \Rightarrow M $,即视图更改自动同步数据源。
View 视图:HTML 模板
Model 模型:数据源(参考后端的Entity
、Domain
等概念)
ViewModel 视图模型:负责视图与数据源的同步(绑定器)
数据双向绑定
作为 MVVM
模式的典型应用,Vue
就是通过 数据双向绑定
来实现 $ VM $ 模块的。
其内部基本流程:
由于第一版中并不存在 computed
计算属性,compiler
模块只会去解析 HTML 模板,把其中出现的数据项作为计算属性为其创建 binding
,并维护属性之间的依赖关系。
下面,我们一起看看 响应式数据
的实现细节: