变更检测逃逸
- 此问题与变更检测相关,但是并不完全算是变更检测的问题
可能发生时机
- 当前zone为
<root>
并且调用了detectChanges
- 如果变更的属性会影响组件/指令的生成,那么这个组件在生成的时候,就会出现在
<root> zone
原理
packages\core\src\render3\instructions\shared.ts:357
refreshView
- 变更检测 在检测触发时,会刷新视图,这里包括
赃值变更
但是不仅仅包括,如果值变化影响到了组件的生成,那么就会使生成的组件处于目前的<root> zone
中
流程
- (xxx zone)检测->刷新视图->值变化->值变化是否会生成新的组件->组件在(xxx zone)中生成