MST

星途 面试题库

面试题:Angular中的组件生命周期钩子

请详细阐述Angular组件生命周期钩子有哪些,以及它们各自的触发时机和使用场景,例如ngOnInit、ngOnDestroy等。
21.3万 热度难度
前端开发Angular

知识考点

AI 面试

面试题答案

一键面试

1. ngOnChanges

  • 触发时机:当组件的输入属性(@Input())的值发生变化时触发。在组件初始化时,若有输入属性,也会触发一次。
  • 使用场景:用于当输入属性改变时,需要执行一些特定逻辑的场景,比如根据新的输入值重新计算一些数据。例如,一个显示用户信息的组件,当传递进来的用户ID变化时,重新获取新用户的详细信息。

2. ngOnInit

  • 触发时机:在组件第一次被创建后,ngOnChanges 之后触发,只触发一次。
  • 使用场景:用于组件的初始化操作,如初始化数据、订阅Observable等。例如,在一个文章详情组件中,在 ngOnInit 中通过文章ID从服务器获取文章内容。

3. ngDoCheck

  • 触发时机:在每个Angular变更检测周期中被调用,在 ngOnChangesngOnInit 之后,每次变更检测时都会触发。
  • 使用场景:用于自定义变更检测逻辑,当Angular默认的变更检测机制无法满足需求时使用。比如检测对象内部属性的变化,因为Angular默认检测机制无法检测到对象内部属性的更改。

4. ngAfterContentInit

  • 触发时机:当组件的内容(<ng-content> 投影的内容)被初始化之后触发,只触发一次。
  • 使用场景:用于操作组件投影进来的内容,例如获取投影内容中的DOM元素并进行操作,或者对投影进来的子组件进行初始化后的操作。

5. ngAfterContentChecked

  • 触发时机:在每次组件内容(<ng-content> 投影的内容)被检查之后触发,每次变更检测时,在 ngAfterContentInit 之后触发多次。
  • 使用场景:用于在组件内容检查之后执行某些逻辑,例如确保投影内容的样式在每次检查后都正确应用。

6. ngAfterViewInit

  • 触发时机:当组件的视图(包括子视图)被初始化之后触发,只触发一次。
  • 使用场景:用于访问和操作组件视图中的DOM元素或子组件,比如对一个图表组件进行初始化,需要在视图渲染完成后获取图表容器的DOM元素来绘制图表。

7. ngAfterViewChecked

  • 触发时机:在每次组件视图(包括子视图)被检查之后触发,每次变更检测时,在 ngAfterViewInit 之后触发多次。
  • 使用场景:用于在视图检查之后执行一些逻辑,例如当视图中的数据发生变化后,进行一些与视图相关的额外更新操作,如调整某些元素的位置或样式。

8. ngOnDestroy

  • 触发时机:当组件被销毁时触发,如组件从DOM中移除时。
  • 使用场景:用于执行清理操作,如取消订阅Observable以避免内存泄漏,清理定时器等。例如,在一个组件中订阅了一个Observable来实时获取数据,在组件销毁时需要取消这个订阅。