В настоящее время я использую Angular: 7.2.14 и хотел бы узнать, может ли кто-нибудь объяснить, как перенаправить параметры запроса с помощью средства защиты маршрута, общего сервиса или других средств и т. Д.
Проблема I 'Чтобы попытаться решить, требуется, чтобы параметры запроса поступали из корневого пути Uri, а затем перенаправляли маршрут на правильный дочерний компонент, сохраняя запрос без изменений, когда маршрутизатор изменяет Uris.
Например, допустим, что у вас есть внешняя ссылка, связанная с угловым приложением (см. Маршруты ниже), а исходная ссылка маршрута: domain.com?foo=bar
, так как это корневой маршрут ''
, тогда угловой будет передаватьмаршрут к соответствующему дочернему маршруту ''
, который, в свою очередь, перенаправляет на 'login'
.Конечный результат приводит вас сюда domain.com/#/login
, и мой запрос ?foo=bar
теряется.
Как вы создаете маршрут, охрану маршрута или даже службу и т. Д. И поддерживаете исходный запрос, но также перенаправляете васдо конечного местоположения domain.com/#/login?foo=bar
, начиная с корневого пути?
const routes: Routes = [
{
path: '', component: AuthorizeComponent,
children: [
{ path: '', redirectTo: 'login' },
{ path: 'login', component: LoginComponent, canActivate: [LoginGuardService] },
{ path: 'confirm', component: ConfirmComponent, canActivate: [ConfirmGuardService] },
{ path: 'error', component: ErrorComponent },
]
}];
Я попытаюсь показать мои настройки здесь.У меня действительно есть LoginGuardService
, который реализует canActivate
, и внутри функции canActivate я могу перенаправить, сохраняя запрос вместе, используя router.navigate(['/login'], { queryParams: route.queryParams })
, за исключением того, что ТОЛЬКО это работает, когда вы напрямую связываетесь с маршрутом, таким как domain.com/#/login?foo=bar
, а не с корнем сначала,
LoginGuardService
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (this.auth.isLoggedIn()) {
this.router.navigate(['/confirm'], { queryParams: route.queryParams });
} else {
return true;
}
}
ConfirmGuardService
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (!this.auth.isLoggedIn()) {
this.router.navigate(['/login'], { queryParams: route.queryParams });
} else {
return true;
}
}