angular6如何通过字符串名称创建注入服务

时间:2018-08-22 00:48:32

标签: angular angular6

例如,我在根模块中注入了三个服务:AService,BService,CService。在组件中,有一个名为“ type”的字符串变量,现在我希望通过“ type”动态调用注入的服务。如:如果类型==='A',则应注入AService,并调用aService.xxx();如果类型==='B',则应注入BService,并调用bService.xxx();

添加:我的目的是在添加新服务(如DService)时,可以按类型值动态调用它,而不必更改此组件中的任何代码。

1 个答案:

答案 0 :(得分:1)

将Angular的Injector注入您的组件中。 使用app.module.ts

providers的{​​{1}}部分中发布服务
InjectionToken

然后通过调用

将其添加到您的组件中
{ provide: new InjectionToken<string>('A'), useClass: AService }

其中let type = 'A'; // ... const service = this.injector.get(new InjectionToken<string>(type)) as XxxService; service.xxx(); 是声明方法XxxService的接口。

您也可以直接使用字符串,而不用将它们包装在xxx()中,但这已被弃用。