27
2020
04

angular 的数据绑定采用什么机制?详述原理

脏检查机制。


双向数据绑定是 AngularJS 的核心机制之一。当 view 中有任何数据变化时,会更新到 model ,当 model 中数据有变化时,view 也会同步更新,显然,这需要一个监控。


原理就是,Angular 在 scope 模型上设置了一个 监听队列,用来监听数据变化并更新 view 。每次绑定一个东西到 view 上时 AngularJS 就会往 $watch 队列里插入一条 $watch ,用来检测它监视的 model 里是否有变化的东西。当浏览器接收到可以被 angular context 处理的事件时, $digest 循环就会触发,遍历所有的 $watch ,最后更新 dom。


举个栗子


<button ng-click="val=val+1">increase 1</button>


click 时会产生一次更新的操作(至少触发两次 $digest 循环)


按下按钮


浏览器接收到一个事件,进入到 angular context


$digest 循环开始执行,查询每个 $watch 是否变化


由于监视 $scope .val 的 $watch 报告了变化,因此强制再执行一次 $digest 循环


新的 $digest 循环未检测到变化


浏览器拿回控制器,更新 $scope .val 新值对应的 dom


$digest 循环的上限是 10 次(超过 10次后抛出一个异常,防止无限循环)。


详见 关于 AngularJS 的数据绑定

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。