Используя Angular 7.x, я хочу изменить свой родительский компонент заголовка в соответствии с дочерними маршрутами и, если они активированы или нет.Так что в моем случае
AppComponent
Feature Module <= detect changes here
Child Components of feature module
Так что моя маршрутизация очень проста, app-routing.module просто содержит загрузку функционального модуля с loadChildren, здесь ничего особенного.
Тогда эта функцияМодуль содержит маршруты для дочерних компонентов.Существует один parentComponent, мы называем его ParentComponent
, который содержит выход маршрутизатора.Есть также некоторые заголовки, которые я хочу изменить в соответствии с дочерними элементами.
ТАК у меня есть два дочерних компонента: create
и ':id'
(страница сведений).Когда я запускаю эти маршруты, мне нужно, чтобы родительский компонент просто соответственно изменил их текстовое содержимое.Так, например, когда запускается страница создания, я хочу добавить заголовок: «Создать новый элемент», а для страницы: id я хочу показать «Страница сведений».
Теперь я понял, чтонужно подписаться на события роутера или на activRoute (или снимок).Я в растерянности, поэтому не знаю, что здесь делать.
Мой родительский компонент теперь выглядит следующим образом:
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
@Component({
selector: 'parent-component',
templateUrl: './parent.component.html',
})
export class ParentComponent implements OnInit {
title = 'Parent Title';
// Check if it is possible to change the title according to the route
subtitle = 'Parent subtitle';
constructor(private readonly router: Router, private readonly route: ActivatedRoute) {}
ngOnInit(): void {
this.route.url.subscribe(data => {
if (this.route.snapshot.firstChild) {
console.log('yes', this.route.snapshot.firstChild);
// Change header with a if/else or switch case here
} else {
// Display standard text
console.log('no');
}
});
}
}
это выходные данные console.logs, обратите внимание, что в моем реальном приложении родительский элемент называется 'timesheets'.
Возможно, есть другое решение для этого?Может быть, услуга, но вся информация в основном уже находится в пути, поэтому я пытаюсь выяснить, так ли это решить мою проблему.