如何动态实例化Angular 6服务?

时间:2018-11-05 11:22:37

标签: angular angular-services

我有一个名为HeaderService(header.service.ts)的服务,该服务将URL作为构造函数参数,并具有方法getManifest,该方法返回一个JSON。现在,JSON有一个array的URL。我必须为它们击中URLsgetManifest。现在,我计划为每个对应的URL创建一个单独的HeaderService实例,然后调用getManifest,但事实证明Angular 6不提供该功能(我来自Java背景我当时的想法有点像Java。因此,如何动态创建HeaderService的实例?请注意,在注射时我无法这样做,因此factory选项在这里似乎对我没有用。

此外,我不希望更改HeaderService的代码,因为它是使用Swagger CodeGen生成的,其次,我在其他一些类中编写了getManifest(URL: string)(例如{{1 }})将导致代码重复。

注意:我已经提到了先前发布的问题(like this one),但他们讨论了如何在注入时创建多个实例 。我的情况不同。

1 个答案:

答案 0 :(得分:0)

我认为您只需要将该服务创建为一个新对象(最后是一个简单的类)并使用它来做您需要做的事情,让我举个例子更清楚:

extern int number;

int main(int argc, char *argv[]) 
{
    printf("%d",number);
    return 0;
}

我不确定您到底需要做什么,如果您需要做更多的事情而不是使用箭头功能,只需使用方括号并放置逻辑即可。

另一件事是,如果您需要调用一个返回可观察值的方法,则可以将它们转换为promise并以并行或可观察的方式运行它们:

const service = new HeaderService('originalURL');
service.getManifest().forEach(url => new HeaderService(url));

一些链接:

  

https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Promise/all

     

https://www.learnrxjs.io/operators/combination/forkjoin.html