Использование базового класса для установки заголовков страниц на угловых 7 - PullRequest
1 голос
/ 12 апреля 2019

В моем приложении 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), но я хочу избежать этого, если я могу просто упростить вещи.

...