HttpClientModule устарел в Angular 18, какая замена?

У меня есть проект, который я перенес на Angular 18 с настройкой для использования HttpClient путем импорта HttpClientModule.

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

В версии 17 HttpClientModule все было хорошо, но теперь она помечена как устаревшая.

Почему он устарел и чем он может заменить?

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
16
0
15 191
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

HttpClientModule был заменен уже существующей функцией поставщика provideHttpClient().

@NgModule({
  imports: [
    BrowserModule,
    // Remove the module 
    ...
  ],
  declarations: [
    AppComponent,
    ...
 ],
 providers: [provideHttpClient()] // add it here
 bootstrap: [ AppComponent ]
})
export class AppModule {} 

Если вы видите следующую ошибку: Type 'EnvironmentProviders' is not assignable to type 'Provider'., это означает, что вы импортировали HttpClientModule в компонент. Этого не должно было произойти в первую очередь. Просто удалите импорт.

Если вы используете автономный компонент, provideHttpClient() необходимо добавить к поставщикам при вызове bootstrapApplicati():

boostrapApplication(AppComponent, {providers: [provideHttpClient()]});

Причина этого изменения заключается в том, что HttpClientModule удвоил функцию provideHttpClient(), которая была введена для автономных приложений.

А вот выдержка из исходного кода Angular, модуль на самом деле просто предоставлял HttpClient. (Никаких деклараций, импорта или экспорта)

@NgModule({
  providers: [provideHttpClient(withInterceptorsFromDi())],
})

export class HttpClientModule {}

Поэтому команда решила объявить его устаревшим, и в сообщении об устаревании предлагается использовать функцию поставщика provideHttpClient(). Таким образом, разработчики будут менее склонны объявлять и модуль, и поставщика. Это была обычная проблема среди новых разработчиков.

У меня не работает. Я получаю: TS2322: Тип «EnvironmentProviders» нельзя назначить типу «Поставщик».

Filipe Melo 24.05.2024 16:28

Вы не должны иметь его в компоненте.

Matthieu Riegler 24.05.2024 16:30

Что делать, если нет AppModule, а есть отдельный AppComponent и служба, которая внедряет HttpClient? Где предоставить новую форму устаревшего HttpClientModule? Если я ничего не предоставлю, я получу сообщение «NullInjectorError: NullInjectorError: Нет поставщика для _HttpClient!» и вы говорите, что метод ProvideHttpClient() не должен использоваться в компоненте приложения (что приводит к тому, что «Тип «EnvironmentProviders» не может быть назначен типу «Поставщик»).

Simon 02.06.2024 20:22

@Simon добавляй его в список провайдеров при звонке boostrapApplication

Matthieu Riegler 02.06.2024 23:29

Добавьте это в файл app.config.ts и не добавляйте импорт HttpClient или HttpClientModule в app.comComponent.ts.

MdFarzan 14.06.2024 11:55

Чтобы использовать ProvideHttpClient(), его необходимо импортировать из @angular/common/http.

rogervila 16.07.2024 09:19

Вы также можете добавить файл app.config.ts.

export const appConfig: ApplicationConfig = {
  providers: [
    . . .
    provideHttpClient(withFetch())
  ]
};

Вам нужно добавить provideHttpClient() к app.config.ts:

Пожалуйста, не загружайте изображения кода.. Кроме того, в этом ответе нет никакой дополнительной ценности. Другой ответ показал то же самое.
JSON Derulo 18.07.2024 10:47

Другие вопросы по теме