我是Angular的初学者,我自己学习,并且坚持使用 ngDoCheck生命周期方法
根据文档:
检测到Angular自己无法或不会自己检测到的更改并对其采取行动。
父组件:
user={
name:"xxx"
}
update(){
this.user.name="yyy"
}
父视图:
<button (click)="update">update</button>
<child-comp [inputprop]="user"></child-comp>
子组件
ngDoCheck(){
console.log(this.inputprop);
}
据我所知,使用这种生命周期方法来获得更深层次的最新变化,即ngOnChanges无法检测到更深层次的输入属性变化。
用简单的话来说,ngOnChanges将仅检测到对属性的引用而检测到属性更改。
在上面的示例中,ngDocheck生命周期方法没有做任何事情来获取属性的最新更改。但是,更改检测可以帮助您更深入地获取最新更改
我想知道使用ngDoCheck生命周期方法的确切用例。
答案 0 :(得分:0)
您的子组件更改检测器可能具有以下策略
在默认策略中,CD会运行@Input()装饰的属性中的任何更改
在onPush策略中,将新对象(引用)传递给@Input装饰的属性时,CD会运行。
不管采取何种策略,CD始终在以下情况下运行
请记住,Angular CD可以可视化为有向树,这意味着所有组件都可以视为树中的一个节点,并且Angular始终从根节点到树的底部运行CD。
即使CC-121中触发了一个事件,Angular也会从根组件到底部运行CD。但是,CD的运行将在将策略设置为onPush的节点处停止,并且不会在@Input装饰的属性之一中传递新对象。
因此,现在您对CD的运行时间和方式有所了解,每次为组件运行CD时,就会执行ngDoCheck()生命周期。
我希望它会有所帮助。
谢谢