Эта ошибка возникает, когда EnvironmentProviders используются в контексте, принимающем только обычные провайдеры,
например в массиве providers компонента. Провайдеры среды предназначены для конфигурации уровня приложения и могут
использоваться только в инжекторах среды (таких как корневой инжектор, настроенный в bootstrapApplication, или
конфигурации маршрутов).
Распространенные сценарии
Использование provideHttpClient() в провайдерах компонента
Функции вроде provideHttpClient() возвращают EnvironmentProviders, которые нельзя использовать на уровне
компонента:
@Component({
providers: [
provideHttpClient(), // ОШИБКА: EnvironmentProviders нельзя использовать здесь
],
})
export class UserProfile {}
Использование importProvidersFrom() в провайдерах компонента
Функция importProvidersFrom() также возвращает EnvironmentProviders:
@Component({
providers: [
importProvidersFrom(SomeModule), // ОШИБКА: нельзя использовать в провайдерах компонента
],
})
export class DataView {}
Отладка ошибки
Переместите провайдеры среды в подходящее место:
Для провайдеров уровня приложения
Настройте провайдеры среды в bootstrapApplication:
bootstrapApplication(App, {
providers: [provideHttpClient(), importProvidersFrom(SomeModule)],
});
Для провайдеров конкретного маршрута
Используйте массив providers в конфигурации маршрутов:
const routes: Routes = [
{
path: 'admin',
component: AdminView,
providers: [provideHttpClient(withInterceptors([authInterceptor]))],
},
];
Для сервисов уровня компонента
Если вам нужны сервисы с областью видимости компонента, используйте обычные провайдеры вместо провайдеров среды:
@Component({
providers: [
UserClient, // Обычный провайдер — работает
{provide: API_URL, useValue: '/api'}, // Провайдер значения — работает
],
})
export class UserProfile {}
Сообщение об ошибке указывает, какой именно провайдер вызвал проблему. Убедитесь, что все элементы в массиве
providers вашего компонента являются обычными провайдерами, а не провайдерами среды, возвращаемыми такими функциями,
как provideHttpClient(), provideRouter() или importProvidersFrom().