В моем приложении angular 7 я хочу иметь базовый класс, из которого я могу расширять все компоненты маршрута / страницы, чтобы позволить мне согласованно задавать заголовок страницы.Прямо сейчас я не уверен, что то, что я хочу сделать, вообще возможно.Вот что у меня получилось:
import { Injector } from '@angular/core';
import { PageTitleService } from '../services/page-title/page-title.service';
export abstract class BaseTitledPage {
/**
* This string is used to set the page title in the browser window/tab.
* It is also generally encouraged to be used as the "title" of the page is the UI so that these titles are always in sync
*/
protected pageTitle: string;
protected constructor(injectedPageTitle: string) {
this.pageTitle = injectedPageTitle;
const injector = Injector.create({
providers: [ {provide: PageTitleService, deps: []} ]
});
const pageTitleService = injector.get(PageTitleService);
this.setPageTitle(pageTitleService, this.pageTitle);
}
private setPageTitle(svc: PageTitleService, title: string): void {
svc.setPageTitle(title);
}
}
Тогда страница будет использовать это так:
@Component({
selector: 'app-page-home',
templateUrl: './page-home.component.html'
})
export class PageHomeComponent extends BaseTitledPage {
constructor() {
super('Home');
}
}
В идеале я мог бы использовать {{pageTitle}}
в своем шаблоне, и это будет соответствоватьфактический заголовок страницы во вкладке / окне браузера.
Возможно ли здесь то, что я хочу сделать?Могу ли я получить или внедрить сервис в некомпонентный базовый класс, как это?Я знаю, что было бы возможно иметь эту услугу на любом дочернем классе и передать ее в super('Home, pageTitleService)
, но я хочу избежать этого, если я могу просто упростить вещи.