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

Poi*_*shi 5 angular angular-httpclient

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

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

我考虑过直接实例化 httpClient ,然后将其作为参数传递给我的服务。然而,这似乎造成了循环依赖。我也尝试过弄乱注入器,但显然 Angular 团队特别建议不要这样做。我强烈地觉得我错过了一些简单的东西。

应用程序模块.ts

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

function MainServiceFactory() {
    return new MyService();
}
...
providers: [{
    provide: MyService,
    useFactory: MainServiceFactory
}],
...
Run Code Online (Sandbox Code Playgroud)

MyService.ts

...
constructor(private http : HttpClient) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

Tho*_*pra 2

正如大家所说,你必须导入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完全没有问题。

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