1、双向绑定简单原理
双向绑定是在单向绑定的基础上,给可输入元素添加了 change(input)事件来动态修改 model 和 view,常见的实现数据绑定方法:发布者-订阅者模式、脏值检查、数据劫持。
发布者 - 订阅者模式:发布者 - 订阅者模式和观察者模式的区别就在于前者多了一个事件调度中心。观察者模式定义了一种一对多的关系,让多个观察者同时监听同一个数据对象主体,当对象主体发生变化的时候就会通知所有观察者对象。它由两类对象组成观察者和数据主体,主体负责发布事件,观察者通过订阅事件来观察主体。
从下图中可以看出,观察者模式中观察者和目标直接进行交互,而发布订阅模式中统一由调度中心进行处理,订阅者和发布者互不干扰。这样一方面实现了解耦,还有就是可以实现更细粒度的一些控制。比如发布者发布了很多消息,但是不想所有的订阅者都接收到,就可以在调度中心做一些处理,类似于权限控制之类的。还可以做一些节流操作。
脏值检查: 就是通过检查哪些值发生了变化来更新视图,最简单的方式就是通过轮询的方法来实现,也可以在调用了某些特定的方法后进行脏值检查,比如DOM事件,譬如用户输入文本,点击按钮等。( ng-click )、XHR响应事件 ( $http )、浏览器Location变更事件