模型,视图,视图模型vue
在vue中:Model:指的是js中的数据,如对象,数组等等。
View:指的是页面视图
viewModel:指的是vue实例化对象数组
主流框架实现双向绑定(响应式)的作法:
1. 脏值检查:angular.js 是经过脏值检测的方式比对数据是否有变动,来决定是否更新视图,最简单的方式就是经过 setInterval() 定时轮询检测数据变更,固然Google不会这么low,angular只有在指定的事件触发时进入脏值检测,大体以下: DOM事件,譬如用户输入文本,点击按钮等。( ng-click ) XHR响应事件 ( $http ) 浏览器Location变动事件 ( $location ) Timer事件( $timeout , $interval ) 执行 $digest() 或 $apply()在 Angular 中组件是以树的形式组织起来的,相应地,检测器也是一棵树的形状。当一个异步事件发生时,脏检查会从根组件开始,自上而下对树上的全部子组件进行检查,这种检查方式的性能存在很大问题。浏览器
2.观察者-订阅者(数据劫持):
Observer 数据监听器,把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象全部的属性,并使用Object.defineProperty()方法把这些属性所有转成setter、getter方法。当data中的某个属性被访问时,则会调用getter方法,当data中的属性被改变时,则会调用setter方法。
Compile指令解析器,它的做用对每一个元素节点的指令进行解析,替换模板数据,并绑定对应的更新函数,初始化相应的订阅。
Watcher 订阅者,做为链接 Observer 和 Compile 的桥梁,可以订阅并收到每一个属性变更的通知,执行指令绑定的相应回调函数。Dep 消息订阅器,内部维护了一个数组,用来收集订阅者(Watcher),数据变更触发notify 函数,再调用订阅者的 update 方法。app