У меня есть 2 компонента, родитель и ребенок. Один и тот же родительский компонент должен загружаться на 2 разных маршрутах, скажем, route1 и route2. Родительский компонент проверяет, какой маршрут был использован, и устанавливает логическое значение (isRoute1). Дочерний компонент получает это логическое значение в качестве Входных данных и отображает HTML относительно. См. Код скелета ниже.
Допустим, сначала я открываю route1 в браузере. Я мог видеть тексты 'Parent init' и 'Child init' в консоли, а дочерний компонент отображал 'ROUTE1'. Все работает как положено. Затем я перехожу к route2 в браузере (прямо из route1) и получаю неожиданные результаты. В консоли ничего не отображается (поэтому OnInits не сработал), однако дочерний элемент отобразил 'ROUTE2'. Почему Angular не вызвал функцию OnInit ()? Как я мог этого добиться? Я думал, что при изменении маршрута родительский компонент будет перезагружен, так что ребенок.
// Parent component's TS
isRoute1: boolean;
ngOnInit(): void {
console.log('Parent init')
this.router$.pipe(debounceTime(1), untilDestroyed(this)).subscribe(route => {
this.isRoute1 = route.params.id === 'route1';
});}
// Parent component's HTML
<child-component [isRoute1]="isRoute1"></child-component>
// Child component's TS
@Input()
isRoute1: boolean;
ngOnInit(): void {
console.log('Child init')
}
// Child component's HTML
<div *ngIf="isRoute1; else route2"> ROUTE1 </div>
<div #route2> ROUTE2 </div>