Angular ngOnInit() 和 ngOnChanges() 有什么区别?

What is the difference between Angular ngOnInit() and ngOnChanges()?

Angular 默认提供生命周期钩子 ngOnInit() 和 ngOnChanges() 。 如果我们已经有了 ngOnChanges,为什么还要使用 ngOnInit?还有构造函数。

尽量简短。

ngOnInit() 用于仅执行任何一段代码(例如:加载时获取数据)。

ngOnChanges() 将在每次 @Input() 属性 更改时执行。

如果你想根据@Input()值的变化执行任何组件方法,那么你应该在ngOnChanges().

里面写这样的逻辑

正如您所说,为什么我们有 ngOnChanges(), 时还需要 ngOnInit(),这是因为您无法在每次 @Input() 属性 更改时执行一次代码。并且您也不能使用 constructor 来替代 ngOnInit()。因为绑定,例如 @Input 属性在构造函数中不可用。

我想你会明白这个

ngOnChanges() 在其组件的输入绑定属性发生变化时被调用,它接收一个名为 SimpleChanges 的对象,该对象包含已更改和之前的 属性.

ngOnInit() 用于初始化组件中的事物,与 ngOnChanges() 不同,它仅在第一次 ngOnChanges() 之后调用一次。

当通过父级更改组件输入时,将首先在生命周期挂钩上调用 ngOnChanges。

在调用第一个 ngOnChanges 之后初始化组件时,只会调用一次 ngOnInit。

如何设置表单

0。静态设计 Html 标记应该包含设计的结构和布局。任何永久性 类 都将直接应用在标记中。

1.构造函数

设置依赖项,如服务、提供程序、配置等。这些使组件能够管理自身以及与其他元素交互。

2。初始化程序 (ngOnInit)

当要从外部源检索值而不是在设计时知道它们的值时,填充下拉列表等表单元素。只需执行一次即可设置表单的初始呈现

3。输入变化 (ngOnChanges)

在任何输入的每次更改时运行,并执行由该特定控件触发的任何操作。例如,如果有多个输入并且在单个输入上出现任何验证失败,您需要关注失败的控件并禁用 all 其他控件,您可以在此处执行此操作。对验证逻辑很有用。

不用于处理其他控件的布局和结构。

如果一个控件影响其他控件,这通常会递归运行,因此必须仔细设计逻辑。

如果你想防止 运行 发生这种情况,你可以禁用 Angular 变化检测并自己手动处理状态。

4.控件的事件处理程序 在这里,您获取控件的最终值,并使用它来执行对窗体中其他控件的操作。只要您更改其他控件的值,ngOnChanges 事件就会再次触发。

ngOnInit 和 ngOnChanges 是属于组件 life-cycle 方法组的函数,它们在我们组件的不同时刻执行(这就是名称 life-cycle 的原因)。以下是所有这些的列表: