Angular 角度4:ngDoCheck与NgateViewChecked之间的差异

Angular 角度4:ngDoCheck与NgateViewChecked之间的差异,angular,lifecycle-hook,Angular,Lifecycle Hook,在Angular 2+中,ngDoCheck和ngafterview checked似乎执行相同的功能。 ngDoCheck据说在触发更改检测时被调用。现在,此更改检测将随着视图中的更改而触发。根据文档,每当视图更改时,都会调用查看检查后的ngAfterViewChecked 当一个足够时,这里需要两个生命周期挂钩吗?DoCheck挂钩允许您集成到更改检测周期中,并在对象引用或Angular未自动检测到更改的任何区域中查找更改。界面如下: interface DoCheck { ngDo

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


当一个足够时,这里需要两个生命周期挂钩吗?

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

interface DoCheck {
    ngDoCheck(): void; 
}
根据组件树的大小和复杂程度,
ngDoCheck
方法将执行大量次如果代码实现不当,可能会成为性能瓶颈。除非必要,否则避免使用
ngDoCheck
方法

使用对象类型的属性时,Angular将按值引用查看更改,这意味着它检测整个值的更改,而不是子属性中的更改。在这种情况下,我们将使用
DoCheck
lifecycle钩子并检测对象中的更改

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

interface AfterViewChecked {
    ngAfterViewChecked(): void; 
}
DoCheck主要用于您的业务逻辑更改,在上述场景中angular无法检测到这些更改。选中的
afterview
用于视图跟踪

希望有帮助

有一个巨大的区别

ngDoCheck在每次更改检测运行时都会被频繁调用,您通常应该避免使用它来避免性能问题。它将检测任何元素、内容或视图更改行为的更改

nAfterViewChecked仅在检查视图子项的绑定后调用(它仅与视图相关)。

这两者都是角度。这些是Angular的核心库中的接口,可以连接到您的代码来监听组件属性的更改

这是完整的循环序列

1) ngOnChanges()

2) 恩戈尼尼特()

3) ngDoCheck()

4) ngAfterContentInit()

5) ngAfterContentChecked()

6) ngAfterViewInit()

7) ngAfterViewChecked()

从官方文件

ngDoCheck

检测Angular无法或不会在其上检测到的更改并对其采取行动 拥有

在每次更改检测运行期间调用,之后立即调用 ngOnChanges()和ngOnInit()

nAfterViewChecked()

角度检查零部件视图和子视图后响应/ 指令所在的视图

在ngAfterViewInit和每个后续的 ngAfterContentChecked()

有关更多详细信息:
需要注意的一个重要区别是,
ngDoCheck
lifecycle钩子在当前组件及其子组件中的属性更改生效之前激发,而
ngAfterViewChecked
在发生这些更改之后激发,所以您可以比较组件属性的先前值和当前值。

一个用于任何更改,一个用于视图更改完成更改检测