Vue双向数据绑定的效果的实现,用js实现效果,我觉得是触发后使用setInterval()刷新实现的,今天没事了解一下:vue
实现双向数据绑的方法:angularjs
1.发布者—订阅者模式(backbone.js);浏览器
object.observe() 浏览器已废弃;app
2.脏值检查(anguar.js);性能
指定事件(ng-click/$http/$location/$interval/$digest(只触发当前及子做用域的监控)||$apply(可参数,做用域树上全部监控,推建使用)...)触发时进入脏值检测view和model是否变化,决定同步更新,经过$watch/setInterval()定时轮询检测数据变更;形象的例子解释脏检查机制:双向绑定
======"脏检查机制"(dirty-checking)===========事件
$digest:“嘿,watcher1,你的值是什么?”backbone
watcher1:"是 ‘ngBook’。"作用域
$digest:“好的,你的值改变过吗?(脏了吗?)”同步
watcher1:"没有,$digest先生。"
$digest(心想):这个watcher1的没改变过,那咱们继续下一个吧。
.......
$digest:“嘿,watcher2,你的值是什么?”
watcher2:"报告,是 ‘破狼’。"
$digest:“刚才被改变吗?”
watcher2:"已经被改变过了,刚才的值是‘雪狼’,正等待你的到来呢"
$digest(心想):很好,看来咱们的DOM一会须要更新了。
...继续watcher3/4/5...的询问、检查....最后遍历所改变的watcher。
缺点:遍历轮询watcher消耗性能,特别是单页面监控数量达到很大数量时候。
=================
$digest和$apply
angularjs双向数据绑定原理
3.数据劫持;
object.defineProperty()
vue的双向绑定原理及实现
剖析Vue原理&实现双向绑定MVVM