如何将httpClient注入实例化服务?

时间:2019-01-11 22:09:18

标签: angular angular-httpclient

我正在app.module.ts中实例化MyService,并在我的代码中提供它。

但是,我希望MyService使用httpClient,并且无法按角度地实例化httpClient以将其作为参数传递给MyService。我不确定在MyService中访问httpClient的正确方法是什么。

我已经看过直接实例化httpClient,然后将其作为参数传递给我的服务。但是,这似乎产生了循环依赖。我也尝试过使Injectors混乱,但这显然是Angular团队特别建议的。我强烈感到自己缺少一些简单的东西。

app.module.ts

imports: [
    ...
    httpClientModule
    ...
],

function MainServiceFactory() {
    return new MyService();
}
...
providers: [{
    provide: MyService,
    useFactory: MainServiceFactory
}],
...

MyService.ts

...
constructor(private http : HttpClient) {
    ...
}

没有实例化并作为httpClient的参数传递:我自然会收到“ app.module.ts中的错误,预期为1个参数”! 通过实例化,我打破了角度推荐。

编辑: 我忽略指定我确实导入了httpClientModule

1 个答案:

答案 0 :(得分:1)

正如大家所说,您必须导入HttpClientModule

关于您的代码,我想您正在尝试处理angular's dependency injection

我在stackblitz中做了一个例子:

https://stackblitz.com/edit/angular-yqvlv7?file=src%2Fapp%2Fapp.module.ts

在这里我定义了一个抽象类,使其表现得像一个接口,然后my.service实现了这个接口。

在app.module内部,我使用my-service类提供“接口”。完成所有这些之后,您可以在组件中注入“接口”(在此链接中,hello.component.ts)

HttpClient仅注入my-service中,完全没有问题。

我希望它可以帮助您更好地理解它。