Помимо того, что указано в post , вы можете использовать свойство Route's data , чтобы снабдить ваши компоненты заданными маршрутом c пользовательскими данными.
data
:
Дополнительные определяемые разработчиком данные, предоставляемые компоненту через ActivatedRoute. По умолчанию дополнительные данные не передаются.
Данные, определяемые разработчиком, также являются безопасным и практичным способом, поскольку после создания приложения (для производства) именам классов присваивается произвольное имя, поэтому не стоит полагаться на него.
Пример:
Конфигурация маршрутизации
const routes: Routes = [
// ...
{
path: 'home',
component: HomeComponent,
data: {
page: 'Home Page',
class: 'super-sweet-home',
color: 'blue',
// ....
},
}
];
Использование данных
- Решение 1: Внутри компонента, например
HomeComponent
.
private subscription: Subscription;
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.subscription = this.route.data.subscribe((data: any) => {
/* data will be provided after navigation ends successfully */
});
}
public readonly currentPageData = new Subject<any>();
constructor(private router: Router) {
this.router.events.pipe(filter(event => event instanceof ActivationEnd))
.subscribe(event => {
this.currentPageData.next((event as ActivationEnd).snapshot.data as any);
});
}
Внутри компонента вы можете добавить сервис и подписаться на currentPageData
из SiteService
, например:
constructor(private siteService: SiteService) {
this.siteService.currentPageData.subscribe((data) => {
/* data data data */
});
}
Последнее, но не менее важное: не забудьте отменить подписку .?