MVVM
M - Model:Model 代表数据模型
V - View:View 视图,它负责将数据模型转化为视图展现出来
VM - ViewModel:ViewModel就是一个同步 View 和 Model 的对象,
连接 Model 和 View; 用于监听数据模型的改变和控制视图行为、处理用户交互
vue采用数据劫持结合发布-订阅模式的方式,通过Object.defineProperty劫持data属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。在它的实现原理中有5个比较重要的概念:
1. vue 类
2. Observer 类 3. Compiler 类 4. Dep 类 5. Watcher类
+
+
+
+
步骤:
1、实例化Vue对象 将 el 和 data 挂载到vue实例上
2、实例化 Observer (通过Object.defineProperty来对data的所有属性以及子属性的属性进行数据劫持;实例化订阅器Dep,让每个属性都拥有一个订阅器;在get方法中添加订阅,set方法中当目标值发生改变的时候触发Dep中的notify方法去遍历通知每个订阅者。
3、实例化Compiler;分别对节点型模版和文本型模版进行编译, 编译的同时给节点添加数据监听,当数据改变的时候触发相应试图的更新。并且在此阶段实例化一个订阅者Watcher(实例化订阅者的时候,会触发对应的属性的get方法,然后通过设置一个全局变量例如Dep.target为这个watcher实例,将这个实例push到Dep中)
4、这样vue类作为数据绑定的入口,整合Observer和Compiler、Dep、Watcher;通过Observer来监听model数据的变化,通过Compile来解析编译模版指令,最终通过Watcher建立起Observer和Compiler的连接,就实现了数据更新->视图更新;视图交互变化->数据model变更的双向数据绑定效果
手写MVVM