Angular 4:ngDoCheck 与 ngAfterViewChecked 之间的区别

Har*_*wat 5 lifecycle-hook angular

在 Angular 2+ 中,ngDoCheckngAfterViewChecked似乎执行相同的功能。 ngDoCheck据说只要触发更改检测就会调用。现在,此更改检测将随着视图中的更改而触发。根据文档,ngAfterViewChecked每当视图更改时都会调用。

当一个生命周期钩子就足够了时,这里还需要两个生命周期钩子吗?

Div*_*eet 2

DoCheck钩子允许您集成到更改检测周期中,并查找对象引用中的更改或 Angular 未自动检测更改的任何区域。界面如下:

interface DoCheck {
    ngDoCheck(): void; 
}
Run Code Online (Sandbox Code Playgroud)

根据组件树的大小和复杂性,该ngDoCheck方法将执行大量次,如果代码实现不当,可能会成为性能瓶颈。除非必要,否则避免使用ngDoCheck方法。

当使用对象类型的属性时,Angular 将通过值引用来观察更改,这意味着它会检测整个值的更改,但不会检测子属性的更改。在这种情况下,我们将使用DoCheck生命周期挂钩并检测对象的更改。

ngAfterViewChecked方法代表AfterViewChecked生命周期钩子和接口。它允许您提供由于某种原因 Angular 无法处理的自定义更改跟踪。该行为类似于 AfterContentChecked 挂钩,但适用于视图模板子项而不是投影内容。

interface AfterViewChecked {
    ngAfterViewChecked(): void; 
}
Run Code Online (Sandbox Code Playgroud)

DoCheck 主要用于您的业务逻辑更改,在上述场景中,角度不会检测到这些更改。用于AfterViewChecked查看跟踪。

希望有帮助!