Я решил исправить это следующим образом:
1) Создать службу хлебных крошек, которая использует BehaviorSubject для получения обновлений для параметров
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { BreadcrumbsList } from './breadcrumbsList';
import { ParseErrorLevel } from '@angular/compiler';
@Injectable({
providedIn: 'root'
})
// https://stackoverflow.com/questions/46047854/how-to-update-a-component-without-refreshing-full-page-angular
export class BreadcrumbsService {
public breadcrumbsList: BehaviorSubject<BreadcrumbsList> = new BehaviorSubject({
'@context': 'https://schema.org',
'@type': 'BreadcrumbList',
itemListElement: []
});
constructor() {}
// https://developers.google.com/search/docs/data-types/breadcrumb#example
updateParamMap(paramMap, root, suffix = null, endpoint = null) {
const breadcrumbsList = {
'@context': 'https://schema.org',
'@type': 'BreadcrumbList',
itemListElement: []
};
let position = 0;
let curPath = '';
console.log({ test: paramMap.get('level1') });
for (var i = 0; i < 6; i++) {
let level = paramMap.get('level' + i);
if (i === 0) {
level = root;
}
if (!level) {
continue;
}
curPath += '/' + level;
let item = {
'@type': 'ListItem',
position: i + 1,
name: level,
item: suffix ? curPath + '/' + suffix : curPath
};
breadcrumbsList.itemListElement.push(item);
}
if (endpoint) {
let item = {
'@type': 'ListItem',
position: i + 2,
name: endpoint
};
breadcrumbsList.itemListElement.push(item);
}
// update the breadcrumbs list for anything that is listening for updates
this.breadcrumbsList.next(breadcrumbsList);
}
}
2) В каждом загруженном компонентепо маршруту, который должен обновлять хлебные крошки, импортировать BreadcrumbService и добавить эту строку в ngOnInit()
this.breadcrumbsService.updateParamMap(this.route.snapshot.paramMap, 'assets', 'browse');
3) В компоненте breadcrumb подписать breadcrumbsList на обновления из BreadcrumbsService
import { Component, OnInit, Input } from '@angular/core';
import { BreadcrumbsList } from './breadcrumbsList';
@Component({
selector: 'app-breadcrumbs',
templateUrl: './breadcrumbs.component.html',
styleUrls: ['./breadcrumbs.component.scss']
})
export class BreadcrumbsComponent implements OnInit {
@Input() path: String[];
breadcrumbsList: BreadcrumbsList;
constructor(breadcrumbsService: BreadcrumbsService) {
breadcrumbsService.breadcrumbsList.subscribe(value => {
this.breadcrumbsList = value;
});
}
ngOnInit() {}
}
И шаблон хлебных крошек может обрабатывать BreadcrumbsList