Провайдеры в Angular: основы работы

В контексте 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: "..."
};

Читайте также:

Документация Angular

Основы unit-тестирования в Angular

Tags:

Добавить комментарий