У меня есть маршрут UserComponent
(который загружается как «родительский» маршрут: path: ''
), который содержит только директиву <router-outlet>
.Оттуда я хочу либо перейти к StartPageComponent
(дочерний корень: path: ''
), если для свойства sartPage
установлено значение true, либо к IdeasComponent
(дочерний корень: path: 'list'
), если это недело.Свойство startPage
содержится в объекте instanceData
, который передается «родительскому» маршруту в качестве разрешенных данных.Хотя я делаю следующее: я проверяю свойство startPage
в StartPageGuard
(которое реализует интерфейс CanDeactivateChild
) и пытаюсь получить доступ к route.data['instanceData'].startPage
(маршрут имеет тип ActivatedRouteSnapshot).И я не могу получить к нему доступ, даже если я вижу объект InstanceData
в консоли при распечатке самого route
.Однако при распечатке route.data
я получаю только пустой объект.Поэтому было бы хорошо, если бы кто-то мог объяснить мне, что там происходит и, возможно, как я могу предотвратить переход к корневому маршруту на основе значения свойства startPage
.Вот мой код: StartPageGuard
:
import { ActivatedRouteSnapshot, CanActivateChild, RouterStateSnapshot, Router, ActivatedRoute } from '@angular/router';
import { Injectable } from '@angular/core';
@Injectable()
export class StartPageGuard implements CanActivateChild {
constructor(private router: Router, private activeRoute: ActivatedRoute) {}
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
const showStartPage = route.data['instanceData'].startPage;
if (showStartPage) {
return true;
} else {
this.router.navigate(['/list'], {relativeTo: this.activeRoute});
}
}
}
Переменная routes: Routes
из appRoutingModule
:
{
path: '',
component: UserComponent,
canActivateChild: [StartPageGuard],
resolve: {
instanceData: InstanceResolve
},
children: [
{
path: '',
component: StartPageComponent,
},
{
path: 'list',
component: IdeasComponent,
}
А UserComponent
содержит только router-outlet
директивы.