如何在Angular中动态创建服务?

时间:2018-05-29 20:35:51

标签: angular typescript

我试图在给定字符串名称(即反射)的运行时期间动态地实例化服务。类似的东西:

let myService = new window[myClassName](myParams);

或者,或者:

let myService = Object.create(window[myClassName].prototype);
myService.constructor.apply(myService, myParams);

我查看了Injector类,但它需要一个类型,而不是字符串(https://angular.io/api/core/Injector)。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:1)

您仍然可以将Injector与字符串结合使用。这只是以您想要的方式提供您的提供商的问题。 这是Angular页面上的示例:https://angular.io/api/core/Injector#example-1 [provide: Square][provide: Square, useClass: Square]的缩写(当您想要自己实例化服务时,可以使用useFactory代替useClass)您可以更改第一个参数(provide )基本上你想要的任何符号,所以也是字符串。 看看我设置的这个POC https://stackblitz.com/edit/angular-mg1ezb

答案 1 :(得分:-3)

你可以尝试

instance = new window["yourClassName"]();