例如,我在根模块中注入了三个服务:AService,BService,CService。在组件中,有一个名为“ type”的字符串变量,现在我希望通过“ type”动态调用注入的服务。如:如果类型==='A',则应注入AService,并调用aService.xxx();如果类型==='B',则应注入BService,并调用bService.xxx();
添加:我的目的是在添加新服务(如DService)时,可以按类型值动态调用它,而不必更改此组件中的任何代码。
答案 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()
中,但这已被弃用。