我有一个项目迁移到 Angular 18,并设置为通过导入
HttpClient
来使用 HttpClientModule
。
@NgModule({
imports: [
BrowserModule,
HttpClientModule,
...
],
declarations: [
AppComponent,
...
],
bootstrap: [ AppComponent ]
})
export class AppModule {}
在 v17
HttpClientModule
一切都很好,但现在它被标记为已弃用。
为什么它被弃用以及替代品是什么?
HttpClientModule
已被现有的 provideHttpClient()
提供程序功能取代。
@NgModule({
imports: [
BrowserModule,
// Remove the module
...
],
declarations: [
AppComponent,
...
],
providers: [provideHttpClient()] // add it here
bootstrap: [ AppComponent ]
})
export class AppModule {}
如果您在组件中导入它,则完全相同的更改,删除导入并将
provideHttpClient()
添加到 @Component({})
装饰器中的提供者条目。
此更改背后的原因是
HttpClientModule
将针对独立应用程序引入的provideHttpClient()
功能加倍。
这里是 Angular 源代码的摘录,该模块实际上只是提供 HttpClient。 (无任何报关、进口或出口)
@NgModule({
providers: [provideHttpClient(withInterceptorsFromDi())],
})
export class HttpClientModule {}
因此团队选择弃用它,并且弃用消息建议使用
provideHttpClient()
提供程序功能。这样,开发人员就不太愿意同时声明模块和提供者。这是新开发人员的常见问题。