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