Провайдеры в Angular: основы работы
Development | Комментировать запись
В контексте Angular провайдер – это класс, создающий объект в том случае, когда Angular необходимо разрешить зависимость. По умолчанию провайдер создает класс, но бывают и более сложные ситуации.
Чтобы правильно внедрить сервис в Angular 2+, его необходимо предоставить либо компоненту, либо родительскому модулю, либо модулю приложения. Сервис, который предоставляется в модуле приложения, будет везде иметь один и тот же экземпляр. Рассмотрим следующий пример двух сервисов, предоставляемых в компоненте:
компонент app.component.ts
import { Component } from '@angular/core'; import { WeatherApiService } from './weather-api.service'; import { AuthService } from './auth.service'; @Component({ ..., providers: [WeatherApiService, AuthService] }) export class AppComponent { constructor(public weatherApi: WeatherApiService, public auth: AuthService) {}
А здесь они предоставляются в модуле:
модуль app.module.ts
... import { WeatherApiService } from './weather-api.service'; import { AuthService } from './auth.service';
Провайдеры классов
По умолчанию Angular внедряет провайдера с тем же именем класса и токеном, но useClass позволяет использовать другой класс. Например, следующий код предоставит сервис с токеном Auth, но с классом UserAuth:
providers: [{ provide: Auth, useClass: UserAuth }]
Провайдеры-псевдонимы
Если вы хотите использовать псевдоним старого провайдера для обработки новым провайдером, вы можете сделать это с помощью useExisting. Это было бы полезно, если, например, компонент должен по-прежнему использовать старый провайдер, но логику нужно обрабатывать новым провайдером:
providers: [{ provide: OldService, useExisting: NewService }]
Провайдеры значения
Большую часть времени классы используются в качестве провайдеров, но вместо них можно использовать и простые значения с useValue:
const AUTH_CONFIG = { apiKey: "...", authDomain: "..." };
Читайте также:
Основы unit-тестирования в Angular
Tags: Angular