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>
другого компонента. Внутренний компонент будет искать зависимости во внешнем компоненте.