变更检测逃逸

变更检测逃逸

  • 此问题与变更检测相关,但是并不完全算是变更检测的问题

可能发生时机

  • 当前zone为<root>并且调用了detectChanges
  • 如果变更的属性会影响组件/指令的生成,那么这个组件在生成的时候,就会出现在<root> zone

原理

  • packages\core\src\render3\instructions\shared.ts:357 refreshView
  • 变更检测 在检测触发时,会刷新视图,这里包括赃值变更但是不仅仅包括,如果值变化影响到了组件的生成,那么就会使生成的组件处于目前的<root> zone

流程

  • (xxx zone)检测->刷新视图->值变化->值变化是否会生成新的组件->组件在(xxx zone)中生成