MVVM
介绍
Model
:模型层,负责处理业务逻辑以及和服务器端进行交互View
:视图层:负责将数据模型转化为UI展示出来,可以简单的理解为HTML
页面ViewModel
:视图模型层,用来连接Model
和View
,是Model
和View
之间的通信桥梁
在 MVVM
的架构下,View
层和 Model
层并没有直接联系,而是通过 ViewModel
层进行交互。 ViewModel
层通过双向数据绑定将 View
层和 Model
层连接了起来,使得 View
层和 Model
层的同步工作完全是自动的。
双向绑定的实现
Vue
主要通过以下 4 个步骤来实现数据双向绑定的:
- 实现一个监听器
Observer
:对数据对象进行遍历,包括子属性对象的属性,利用Object.defineProperty()
对属性都加上setter
和getter
。这样的话,给这个对象的某个值赋值,就会触发setter
,那么就能监听到了数据变化。 - 实现一个解析器
Compile
(/kəmˈpaɪl/
):解析Vue
模板指令,将模板中的变量都替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,调用更新函数进行数据更新。 - 实现一个订阅者
Watcher
:Watcher
订阅者是Observer
和Compile
之间通信的桥梁 ,主要的任务是订阅Observer
中的属性值变化的消息,当收到属性值变化的消息时,触发解析器Compile
中对应的更新函数。 - 实现一个订阅器
Dep
:订阅器采用 发布-订阅 设计模式,用来收集订阅者 Watcher,对监听器Observer
和 订阅者Watcher
进行统一管理。