HttpClientModule 在 Angular 18 中已弃用,替代品是什么?

问题描述 投票:0回答:1

我有一个项目迁移到 Angular 18,并设置为通过导入

HttpClient
来使用
HttpClientModule

@NgModule({
  imports: [
    BrowserModule,
    HttpClientModule,
    ...
  ],
  declarations: [
    AppComponent,
    ...
 ],
  bootstrap: [ AppComponent ]
})
export class AppModule {} 

在 v17

HttpClientModule
一切都很好,但现在它被标记为已弃用。

为什么它被弃用以及替代品是什么?

angular angular-httpclient
1个回答
0
投票

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()
提供程序功能。这样,开发人员就不太愿意同时声明模块和提供者。这是新开发人员的常见问题。

© www.soinside.com 2019 - 2024. All rights reserved.