Да, вы можете добиться этого, используя CanActivate
охранник (проверка доступа к маршруту).
CanActivate
Проверяет, может ли пользователь посетить маршрут.
Сказав, чтоЯ ожидаю, что вы перенаправите на другой маршрут после guardCheck
.
У вас не должно быть конфигурации маршрутизатора для размещения двух разных компонентов или модулей на одном маршруте.Вы можете добавить их как дочерний элемент для маршрута и решить, нужно ли вам использовать маршрут на том же маршруте.
Обновление :
Я столкнулся с понятием matcher
, котороеможет использоваться для загрузки двух разных маршрутов по одному и тому же пути:
const routes: Routes = [{
path: 'list',
matcher: matcherForAuthenticatedRoute,
loadChildren: './user/register#RegisterModule'
},
{
path: 'list',
matcher: matcherForTheOtherRoute,
loadChildren: './user/home#HomeModule'
}]
Теперь наша логика сопоставления зависит от двух функций, которые могут быть следующими:
export function matcherForAuthenticatedRoute(
segments: UrlSegment[],
group: UrlSegmentGroup,
route: Route) {
const userService = appInjector.get(MyService);
const isPathMatch = segments[0].path === route.path;
const isUserAuthenticated = userService.isUserAuthenticated('userId');
if(isPathMatch && isUserTypeMatch) {
return {consumed: [segments[0]]};
} else {
return null;
}
}
Мы можем определить appInjector
после загрузки приложения и экспорта его для использования:
appInjector = componentRef.injector;