Проблема в том, что вы хотите использовать @ Optional @ Self , чтобы сделать инжектор необязательным . Но @ optional @ self хорошо работает с чем-то, что является injectable , которое вы можете предоставить в массиве Provider на каком-то уровне. В Angular услуги инъекционные . Таким образом, вы можете использовать @ Optional @Self @ SkipSelf со службами или чем-то вводимым
Когда вы используете constrocutor (private someService: SomeService) , Angular проверит, будет ли SomeService предоставляется на уровне компонентов означает в @ component провайдерах , если нет, предоставляется на уровне модуля , если нет, то предоставляется ли на Root уровне ? Таким образом, angular проверяет все дерево инжекторов .
Когда вы используете @ Optional , эта проверка и т. Д. Не выполняется ....
Имейте в виду, что Injector преобразует токен в зависимость .
Ответьте на ваш вопрос
Вы можете использовать необязательный параметр в машинописном тексте, просто поставив ? пометку рядом с параметром, как показано ниже,
export class BaseComponent implements OnInit {
some = '';
constructor(private injector?: Injector) { // ? to make parameter optional
this.some = injector.get(this.some);
}
ngOnInit(): void {}
}
it также имеет смысл, потому что вы используете ООП вместо классов.
Forked Stackblitz (Также исправлены некоторые другие проблемы)