我读了一篇很棒的关于Angular 2 change detection mechanism的文章。
但是我仍然不能完全理解它是同步的还是异步的。是哪一个?
答案 0 :(得分:3)
当您说(click)="foo()"
时,angular会将其转换为类似的内容:
addEventListener('click', ($event) => {
component.foo();
detectChanges();
});
同样,如果您执行setTimeout(foo)
,则angular会将其重写为:
setTimeout(() => {
foo();
detectChanges();
}
通过猴子修补setTimeout()。
也就是说,更改检测会在事件侦听器执行之后,控制权返回给浏览器之前或其他任何JavaScript代码执行之后立即进行。 chrome开发人员工具的“性能”标签中的以下火焰图证明了这一点:
也就是说,更改检测是浏览器看到的事件侦听器的一部分。如果该侦听器被同步调用,那么更改检测也会被调用。
答案 1 :(得分:0)
与浏览器中所有javascript一样。摘要周期是异步的。