面试了许多求职者,很多求职者只知其然,而不知所以然,写此文章为广大前端小伙伴指引迷津。纯干货!纯干货!纯干货!
目录
变化检测
数据何时变化?
所有的异步操作是可能导致数据变化的根源因素。
- 用户输入操作,比如点击,提交等
- 请求服务端数据
- 定时事件,比如setTimeout,setInterval
如何通知变化
Angular接入了ZoneJS,由它监听了Angular所有的异步事件。其实它重写了所有的异步api!ZoneJS会通知Angular可能有数据发生变化,需要检测更新。
ZoneJS简述
答:异步的事件都会触发ngZone中的hook,hook调用onTurnDone,每当onTurnDone触发,都会调用detectChanges方进行变化检测。
怎么执行变化检测?
答:脏检查。脏检查其实就是存储所有变量的值,每当可能有变量发生变化需要检查时,就将所有变量的旧值跟新值进行比较,不相等就说明检测到变化,需要更新对应视图。