DI декораторы Angular

@Optional

Можно указать Angular, что зависимость необязательна, аннотируя параметр конструктора @Optional()

constructor(@Optional() private _logger: Logger) {
  if (this._logger) {
    this._logger.log(some_message);
  }
}

@Self

@Self говорит DI, чтобы искать зависимость только провайдерах своего компонента. Уместно использовать, если внутри компонета объявляется сервис с именем, которое уже присутствует в проекте.

@Component({
  providers: [], <=== искать тут, в данном случае не найдет и выкинет ошибку
})
export class HelloComponent {
  constructor(
    @Self() private _tyapk: TyapkService,
  ) {}
}

@SkipSelf

@SkipSelf говорит DI, чтобы искать зависимость исключая провайдеры текущего компонента.

@Component({
  providers: [TyapkService], <=== не искать тут, в данном случае не найдет и выкинет ошибку
})
export class HelloComponent {
  constructor(
    @SkipSelf() private _tyapk: TyapkService,
  ) {}
}

@Host

Почти как @Self. @Host сообщает DI искать зависимость в любом инжекторе, пока он не достигнет хоста. В большинстве случаев компонент и является хостом. Существует два распространенных случая, в которых хост-компонент отличается от текущего класса компонента:

  • Директива. Директива будет искать зависимость в компоненте, в котором она находится.
  • Проекция. Когда компонент находится внутри <ng-content></ng-content> другого компонента. Внутренний компонент будет искать зависимости во внешнем компоненте.

Похожие записи

Angular. Редирект по условию

Пример условного перенаправления пользователя в зависимости от некого количества

  • 0 - dashboard
  • 1 - карточка
  • 2 и более - список
09 января 2019 г. в Angular