我有一个包含在根模块中的服务,因此该模块的每个组件都可以使用相同的服务实例。我有一个名为 ComponentX
的组件模块
providers: [
BiesbroeckHttpService
],
组件
constructor(private biesbroeckHttpService: BiesbroeckHttpService){}
但是,有时,根据此 ComponentX 中变量的值,必须隔离此相同的服务,因此它不会使用模块中包含的相同服务实例。这是必需的,因为有几个订阅需要并行运行。
经过几个小时的尝试,我仍然不知道如何做到这一点。
请帮助或指出我正确的方向。
答案 0 :(得分:1)
这不是超级优雅,但可能是一种可能的解决方案。您可以创建一个扩展BiesbroeckHttpService
@Injectable()
export class ExtraService extends BiesbroeckHttpService {}
然后在您的组件中使用ExtraService
作为令牌,但使用BiesbroeckHttpService
作为提供商定义。
@Component({
providers: [
{
provide: ExtraService,
useClass: BiesbroeckHttpService
}
]
})
export class MyComponent {
constructor(
private componentService: ExtraService,
private singletonService: BiesbroeckHttpService
){
// component now has access to both a component instance & the singleton instance
}
}
这是一个stackblitz演示。
有一点需要注意。如果MyComponent
的子组件需要访问MyComponent
的实例,则必须注入ExtraService
而不是BiesbroeckHttpService
。
答案 1 :(得分:-1)
我只是为隔离案例提供另一项服务,并在实际组件上使用if语句来决定使用哪种服务。