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. Can't set breakpoints in VS Code

Вариант решения проблемы, когда не срабатывают точки остановки при разработке Angular приложений в редакторе VS Code
10 апреля 2018 г. в Angular

Переиспользуемые анимации в Angular

Для создания анимации используется функция animation(). Для её использования — useAnimation(). Приводится пример переиспользуемой анимации, а также создание анимации через литерал объекта.

09 октября 2018 г. в Angular

Angular. Отличие baseHref от deployUrl

  • deployUrl - задаёт путь для статических (js, css) файлов в index.html.
  • baseHref - определяет base, используется в ссылках и маршрутизации (routing) Angular