面试题答案
一键面试- 是否为同一个服务实例:
- 该组件获取的服务实例不是同一个。在Angular的多级注入器场景下,子模块注入器会创建自己的服务实例,它会优先使用自己注入器中注册的服务,而不是根模块注入器中的服务。这是因为Angular的注入器查找服务实例时,会从当前组件对应的最近的注入器开始查找,如果找到了就使用该实例,不会继续向上查找根模块的注入器。
- 确保获取根模块注入器注册的服务实例的方法:
- 可以使用
@SkipSelf()
装饰器。在组件的构造函数中,将服务注入参数加上@SkipSelf()
,这样组件在查找服务实例时,会跳过自身组件树层级的注入器,直接从父级注入器开始查找,从而获取到根模块注入器注册的服务实例。例如:
import { Component } from '@angular/core'; import { MyService } from './my - service'; import { SkipSelf } from '@angular/core'; @Component({ selector: 'app - my - component', templateUrl: './my - component.html' }) export class MyComponent { constructor(@SkipSelf() private myService: MyService) {} }
- 可以使用