Angular 2变更检测机制是同步的还是异步的?

时间:2018-09-10 19:52:58

标签: angular

我读了一篇很棒的关于Angular 2 change detection mechanism的文章。

但是我仍然不能完全理解它是同步的还是异步的。是哪一个?

2 个答案:

答案 0 :(得分:3)

当您说(click)="foo()"时,angular会将其转换为类似的内容:

addEventListener('click', ($event) => {
  component.foo();
  detectChanges();
});

同样,如果您执行setTimeout(foo),则angular会将其重写为:

setTimeout(() => {
  foo();
  detectChanges();
}

通过猴子修补setTimeout()。

也就是说,更改检测会在事件侦听器执行之后,控制权返回给浏览器之前或其他任何JavaScript代码执行之后立即进行。 chrome开发人员工具的“性能”标签中的以下火焰图证明了这一点:

change detection is synchronous

也就是说,更改检测是浏览器看到的事件侦听器的一部分。如果该侦听器被同步调用,那么更改检测也会被调用。

答案 1 :(得分:0)

与浏览器中所有javascript一样。摘要周期是异步的。