Абстрактный класс:
export abstract class LanguageChangeAware {
private sub: Subscription;
protected language: string;
protected constructor(protected eventService: EventService) {
this.sub = eventService.getLang().subscribe(lang => {
this.language = lang;
this.load();
});
this.load();
}
protected ngOnDestroy(): void {
this.sub.unsubscribe();
}
protected abstract load();
}
Компонент NewsPage
реализует LanguageChangeAware
абстрактный класс:
export class NewsPage extends LanguageChangeAware {
public news: Array<NewsItem>;
constructor(public newsService: NewsService, protected eventService: EventService) {
super(eventService);
}
protected load() {
console.log('NewsPage - load() - ', this.newsService); // <- undefined
this.newsService.getNewsItemsList().then(data => {
this.news = data;
});
}
}
Моя проблема заключается в том, что в load()
реализации NewsPage
компонент, внедренная зависимость NewsService
не определена.
Одним из возможных решений, предложенных пользователем Антуаном Буазье-Мишо, было создание подписки внутри метода ngOnInit
.
Обновленная версия LanguageChangeAware
:
export abstract class LanguageChangeAware implements OnInit, OnDestroy {
private sub: Subscription;
protected language: string;
protected constructor(protected eventService: EventService) {
}
public ngOnInit(): void {
this.sub = this.eventService.getLang().subscribe(lang => {
this.language = lang;
this.load();
});
this.load();
}
public ngOnDestroy(): void {
this.sub.unsubscribe();
}
protected abstract load();
}