Свойство данных маршрута является статическим и не может быть изменено после создания (источник: https://angular.io/api/router/Data).
. Вероятно, существует множество других способов достижения вашей цели. Наиболее распространенным методом будет захват :id
параметр из маршрута (я предполагаю, что это идентификатор пользователя) и введите его в UserService
(который вы создаете), который затем возвращает displayName
.
пользователя. Более продвинутая опция:
Хотя это может быть излишним для вашего конкретного случая использования, в моем приложении я создал компонент построения хлебных крошек, который извлекает статические компоненты хлебных крошек из свойств данных маршрута и отображает их. Например, одна из моих конфигураций маршрута выглядит так::
...
import { OrganizationBreadcrumbComponent } from './organization-breadcrumb.component'
import { OrganizationMenuComponent } from './organization-menu.component'
import { ProfileBreadcrumbComponent } from './profile/profile-breadcrumb.component'
import { PeopleBreadcrumbComponent } from './people/people-breadcrumb.component'
const routes: Routes = [
{
path: 'organization/:organizationId',
data: {
breadcrumb: OrganizationBreadcrumbComponent,
menu: OrganizationMenuComponent,
},
canActivate: [OrganizationGuard],
children: [
{
path: 'profile',
data: {
breadcrumb: ProfileBreadcrumbComponent,
},
component: ProfileComponent,
},
{
path: 'people',
data: {
breadcrumb: PeopleBreadcrumbComponent,
},
component: PeopleComponent,
}
],
},
];
...
В моем приложении я добавляю классы компонентов (т.е. ProfileBreadcrumbComponent
) к объектам данных в моей конфигурации маршрута. Затем у меня есть компонент рендеринга крошки, который подписывается наПараметр данных маршрутизатора извлекает эти классы компонентов «хлебная крошка» и динамически создает их, используя каждый из них.ponent может делать все, что ему нужно для создания собственного представления.
Например, вы можете создать UserDisplayNameBreadcrumbComponent
, который в ngOnInit()
извлекает текущий идентификатор пользователя из параметров маршрута и ищет, чтоПользователь находит свое отображаемое имя и отображает его.
Я недавно опубликовал вопрос об этом (до того, как все заработало), который объясняет больше, если вам интересно: https://stackoverflow.com/a/43715200/5490505
Я использую ngrx / router-store в своем приложении, что делает подписку на все хлебные крошки для данного маршрута довольно простой.