Я использовал подход, описанный в блоге MSDN , чтобы упростить расширение компонентов без необходимости предоставления всех зависимостей в вызове super()
. Однако это перестало работать в Angular 7 с Typescript 3.
Итак, после начальной загрузки я пытаюсь сохранить инжектор в службе, а затем пытаюсь получить его.
platformBrowserDynamic().bootstrapModule(AppModule).then(ref => {
// Store module's injector in the AppInjector class
console.log('Expected #1: storing app injector');
AppInjector.setInjector(ref.injector);
})
и затем в базовый компонент извлекаю сохраненный инжектор
export class BaseComponent {
constructor() {
console.log('Expected #2: retrieving stored injector');
const injector = AppInjector.getInjector();
}
}
Однако, глядя на консоль, порядок меняется на противоположный - сначала вызывается конструктор BaseComponent
, после чего обещание boostrapModule()
разрешается.
Я не уверен, что в Angular 7 процесс начальной загрузки ведет себя иначе, как подсказка в журналах консоли. То же самое решение использовалось в Angular 6 с Typescript 2, но с версией 7 оно перестало работать. Вот фрагмент стека сломанного приложения, основанного на статье MSDN: https://stackblitz.com/edit/component-inheritance-angular-7
Итак, основной вопрос - как гарантировать, что AppInjector.setInjector()
произойдет до AppInjector.getInjector()
?