为什么在Angular中需要DoCheck生命周期挂钩?
所以我读了有关的文章,知道DoCheck在每个变更检测周期后都会被触发,然后是AfterContentChecked和AfterViewChecked。如果是这样,那么首先为什么需要DoCheck钩子?。我们在DoCheck方法中编写的所有内容都可以在为什么在Angular中需要DoCheck生命周期挂钩?,angular,Angular,所以我读了有关的文章,知道DoCheck在每个变更检测周期后都会被触发,然后是AfterContentChecked和AfterViewChecked。如果是这样,那么首先为什么需要DoCheck钩子?。我们在DoCheck方法中编写的所有内容都可以在AfterContentChecked或AfterViewChecked方法中编写(因为它们在DoCheck方法之后立即触发)。由于DoCheck主要用于调试目的,用其他这些生命周期挂钩替换它不会破坏任何东西。ngDocheck在“检查”组件输入时
AfterContentChecked
或AfterViewChecked
方法中编写(因为它们在DoCheck方法之后立即触发)。由于DoCheck主要用于调试目的,用其他这些生命周期挂钩替换它不会破坏任何东西。ngDocheck
在“检查”组件输入时触发。此外,如果您启用了ChangeDetectionStragegy.OnPush
,并且您的输入没有更改,则不会对组件的模板进行任何检查。正如我所记得的,所有经过检查的钩子都不会被调用
ngDoCheck
hook的有效用例是“深入”检查您的输入
例如,如果您尝试在查看检查后执行此逻辑,则会出现“检查后表达式更改”错误,因为在此钩子中视图已检查
interface ComplexData {
num: number;
}
....
@Input() data: ComplexData;
oldNumValue: number;
ngDoCheck() {
if(this.data?.num !== this.oldNumValue) {
// here we have a situation where default change detection could think the
// value didn't change, as `data` refers to the same object
// but its field was changed instead
this.cdRef.markForCheck();
}
}