ngDoCheck的实际用例(Angular9)

问题描述 投票:0回答:1

我是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生命周期方法的确切用例。
angular use-case angular9 angular-lifecycle-hooks angular-component-life-cycle
1个回答
0
投票
您的子组件更改检测器可能具有以下策略

    默认
  1. onPush
  • 在默认策略下,CD运行@Input()装饰的属性中的任何更改

    在onPush策略中,将新对象(引用)传递给@Input装饰属性时,CD会运行。

    不管采用何种策略,CD始终在以下情况下运行,

      点击,提交等事件被触发
  • 使用API​​的XHR调用
  • 执行诸如assetTimeOut()或setInterval()之类的异步JavaScript函数
  • 请记住,Angular CD可以可视化为有向树,这意味着所有组件都可以看作是树中的一个节点,并且Angular始终从根节点到树的底部运行CD。

    Anguular Componnet Tree

    即使CC-121中触发了一个事件,Angular也会从根组件到底部运行CD。但是,运行CD将停止在将策略设置为onPush的节点上,并且您不会在@Input装饰的属性之一中传递新对象。

    因此,您现在对CD的运行时间和方式有所了解,每次为组件运行CD时,就会执行ngDoCheck()生命周期。

    我希望它会有所帮助。

    谢谢

  • © www.soinside.com 2019 - 2024. All rights reserved.