Вопрос:

Как определить маршрут со значением пути

angular angular-ui-router

9 просмотра

1 ответ

15 Репутация автора

Пожалуйста, у меня какая-то проблема, решающая этот сценарий. Всякий раз, когда мое приложение запускается, оно переходит к DummyComponent, у которого нет значения пути URL ( http: // localhost: 4200 / ). Это просто иметь две кнопки, войти и зарегистрироваться. В ожидании той кнопки, которую вы нажимаете; он переходит на страницу.

Предположим, что пользователь нажимает кнопку входа в систему для авторизации в системе, после успешного завершения пользователь перенаправляется на компонент панели мониторинга => http: // localhost: 4200 / dashboard .

Теперь, даже когда пользователь вошел в систему и вручную изменил URL-адрес на http: // localhost: / 4200 . Это не имеет значения пути, как мне перенаправить пользователя обратно на http: // localhost: 4200 / dashboard

Я понимаю, что могу использовать защиту canActivate для защиты своего маршрута, но проблема, с которой я столкнулся, заключается в том, как определить, когда пользователь посещает URL-адрес без значения пути, например, http: // localhost: 4200 / (при входе в систему), чтобы я мог перенаправить пользователя обратно на панель инструментов? .... Но опять же, когда пользователь не вошел в систему и не посетил URL без пути, он должен перейти прямо к начальному DummyComponent.

Вот как выглядит мой маршрут

const routes4: Routes = [
   {path: '', component: DummyComponent},
   {
     path: '',
     runGuardsAndResolvers: 'always',
     canActivate: [AuthGuard],
     children: [
      { path: 'dashboard', component: DashboardComponent },
       { path: 'user/list', component: PatientsComponent },
       { path: 'user/new', component: PatientComponent },
       { path: '**', redirectTo: 'dashboard', pathMatch: 'full'}
     ]
   },
];
****
canActivate(): boolean {
      if (this.authService.isLoggedIn()) {
        return true;
      }
      this.pnotifyService.error('Error', 'You do not have sufficient permission');
      this.router.navigate(['/login']);
      return false;
  }

Я провел некоторое исследование, но не мог взять в руки сценарий, подобный моему. Любая идея о том, как решить эту проблему, будет высоко оценена. Большое спасибо.

Автор: GNG Источник Размещён: 11.08.2019 08:27

Ответы (1)


0 плюса

2396 Репутация автора

Вы можете использовать другой gaurd, чтобы перенаправить пользователя на правильный путь в зависимости от вашего состояния.

Что-то вроде этого:

import { Injectable }     from '@angular/core';
import { CanActivate }    from '@angular/router';
import { Router } from '@angular/router';

@Injectable()
export class RedirectGuard implements CanActivate {
  canActivate() {

    if (this.authService.isLoggedIn()) {
         // when user is logged in you redirect it to dashboard url
         this.router.navigate(['dashboard']);
         return true;
    }
  }
 //Constructor 
 constructor(private router: Router, private authService: AuthService) { }
}

Теперь вы можете использовать его на своем пути так:

const routes4: Routes = [
   {path: '', component: DummyComponent},
   {
     path: '',
     runGuardsAndResolvers: 'always',
     canActivate: [AuthGuard, RedirectGuard],
     children: [
      { path: 'dashboard', component: DashboardComponent },
       { path: 'user/list', component: PatientsComponent },
       { path: 'user/new', component: PatientComponent },
       { path: '**', redirectTo: 'dashboard', pathMatch: 'full'}
     ]
   },
];
Автор: Asim Hashmi Размещён: 11.08.2019 08:50
Вопросы из категории :
32x32