Угловая маршрутизация автоматически перенаправляет на путь по умолчанию - PullRequest
1 голос
/ 11 марта 2019

Это моя конфигурация маршрутизации

const routes: Routes = [{
  path: '', redirectTo: 'signIn', pathMatch: 'full'
}, {
  path: 'signIn', loadChildren: './sign-in/sign-in.module#SignInModule', canActivate: [AuthGuard]
}, {
  path: 'signUp', canActivate: [AuthGuard], loadChildren: './sign-up/sign-up.module#SignUpModule'
}, {
  path: 'home', canActivate: [AuthGuard], loadChildren: './home/home.module#HomeModule'
}];

И мой охранник

canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
      return this.webService.getUser().pipe( map(data => {
        if (data['status'] === 1 && data['user'] && !data['role']) {
          if (state.url === '/signIn' || state.url === '/signUp') {
            console.log('home');
            this.router.navigate(['home']);
          } else {
            console.log('true');
            return true;
          }
        } else {
          sessionStorage.clear();
          if (state.url !== '/signIn' && state.url !== '/signUp') {
            this.router.navigate(['signIn']);
          } else {
            return true;
          }
        }
      }));
  }

Он загружает каждый путь с помощью «входа», как когда бы я ни захотел посетить «дом», он переходит на http://localhost:4200/home/signIn и загружает страницу «входа», но если я удаляю пустой путь, он корректно загружает «домашнюю» страницу. Какой самый лучший способ загрузить только домашнюю страницу? Я не хочу добавлять 'SignIn' на каждую страницу. Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Вам лучше использовать все маршруты в основном маршруте (один раз пусто), а остальные использовать в «потомках» этого маршрута, таким образом вы можете использовать одноразовую охрану для всех в «canActivateChild» Ваш основной пустой маршрут не нужно охранять, направляя этот маршрут к компоненту главной страницы, а другие охранники автоматически перенаправляют пользователя на страницу входа.

Гильдия CanActivateChild и пример

0 голосов
/ 11 марта 2019

Вы направляетесь по относительному пути.'Главная'.Значение того, что находится в вашем маршруте во время маршрутизации, останется там.

Вы можете направить к абсолютному пути, добавив косую черту ('/') перед маршрутом.

this.router.navigate(['/home']);
...