📌  相关文章
📜  NullInjectorError: R3InjectorError(DynamicTestModule)[TaskService -> HttpClient -> HttpClient]: NullInjectorError: No provider for HttpClient! (1)

📅  最后修改于: 2023-12-03 15:18:02.485000             🧑  作者: Mango

NullInjectorError: R3InjectorError(DynamicTestModule)[TaskService -> HttpClient -> HttpClient]: NullInjectorError: No provider for HttpClient!

该错误意味着程序中未提供所需的 HttpClient 提供程序。HttpClient 是 Angular 中与 HTTP 交互的核心服务。当从服务中注入 HttpClient 时,Angular 会尝试找到并提供 HttpClient 实例,但是如果没有提供它,则会出现上述错误。

常见的错误原因和解决方法:

  1. 忘记在模块中添加 HttpClientModule。在应用程序的模块中,需要将 HttpClientModule 添加到 imports 列表中,以便 HttpClient 服务可以正常工作。
import { HttpClientModule } from '@angular/common/http';

@NgModule({
  imports: [
    HttpClientModule,
    // ...
  ],
  // ...
})
export class AppModule { }
  1. 在服务中未注入 HttpClient。在使用 HttpClient 的服务中,需要将 HttpClient 通过构造函数注入。
import { HttpClient } from '@angular/common/http';

@Injectable({ providedIn: 'root' })
export class TaskService {
  constructor(private http: HttpClient) {}
  
  // ...
}
  1. 在测试中未提供 HttpClient。在 Angular 测试中,需要使用 TestBed.configureTestingModule() 方法通过提供者为测试类提供所需的 HttpClient 实例。
import { HttpClientTestingModule } from '@angular/common/http/testing';

beforeEach(() => {
  TestBed.configureTestingModule({
    imports: [ HttpClientTestingModule ],
    // ...
  })
});

// ...

处理这些常见错误的方法通常可以解决此错误。但是,如果遇到其他问题,则您可能需要检查代码以查找其他调用或配置方面的问题。