面试题答案
一键面试1. ngOnChanges
- 触发时机:当组件的输入属性(@Input())的值发生变化时触发。在组件初始化时,若有输入属性,也会触发一次。
- 使用场景:用于当输入属性改变时,需要执行一些特定逻辑的场景,比如根据新的输入值重新计算一些数据。例如,一个显示用户信息的组件,当传递进来的用户ID变化时,重新获取新用户的详细信息。
2. ngOnInit
- 触发时机:在组件第一次被创建后,
ngOnChanges
之后触发,只触发一次。 - 使用场景:用于组件的初始化操作,如初始化数据、订阅Observable等。例如,在一个文章详情组件中,在
ngOnInit
中通过文章ID从服务器获取文章内容。
3. ngDoCheck
- 触发时机:在每个Angular变更检测周期中被调用,在
ngOnChanges
和ngOnInit
之后,每次变更检测时都会触发。 - 使用场景:用于自定义变更检测逻辑,当Angular默认的变更检测机制无法满足需求时使用。比如检测对象内部属性的变化,因为Angular默认检测机制无法检测到对象内部属性的更改。
4. ngAfterContentInit
- 触发时机:当组件的内容(
<ng-content>
投影的内容)被初始化之后触发,只触发一次。 - 使用场景:用于操作组件投影进来的内容,例如获取投影内容中的DOM元素并进行操作,或者对投影进来的子组件进行初始化后的操作。
5. ngAfterContentChecked
- 触发时机:在每次组件内容(
<ng-content>
投影的内容)被检查之后触发,每次变更检测时,在ngAfterContentInit
之后触发多次。 - 使用场景:用于在组件内容检查之后执行某些逻辑,例如确保投影内容的样式在每次检查后都正确应用。
6. ngAfterViewInit
- 触发时机:当组件的视图(包括子视图)被初始化之后触发,只触发一次。
- 使用场景:用于访问和操作组件视图中的DOM元素或子组件,比如对一个图表组件进行初始化,需要在视图渲染完成后获取图表容器的DOM元素来绘制图表。
7. ngAfterViewChecked
- 触发时机:在每次组件视图(包括子视图)被检查之后触发,每次变更检测时,在
ngAfterViewInit
之后触发多次。 - 使用场景:用于在视图检查之后执行一些逻辑,例如当视图中的数据发生变化后,进行一些与视图相关的额外更新操作,如调整某些元素的位置或样式。
8. ngOnDestroy
- 触发时机:当组件被销毁时触发,如组件从DOM中移除时。
- 使用场景:用于执行清理操作,如取消订阅Observable以避免内存泄漏,清理定时器等。例如,在一个组件中订阅了一个Observable来实时获取数据,在组件销毁时需要取消这个订阅。