#angular #typescript
#angular #typescript
Вопрос:
Я хочу перенаправить на другой URL-адрес после успешного входа в систему. Также, когда он перенаправляет, я также хочу скрыть параметры запроса. Это мой LoggedinGuard
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (this.authService.getUser()) {
return true;
}
this.router.navigate(['login'], { queryParams: { redirectUrl: state.url }});
return false;
}
после успешного входа в систему ссылка в браузере http://localhost:4200/login?redirectUrl=/getup
но мне нужно, чтобы оно отображалось как http://localhost:4200/login
как я могу это сделать?
Ответ №1:
Вы можете передать свое значение, используя state вместо параметра запроса. (Так же, как вы, кажется, уже делаете с url
переменной в показанном коде)
this.router.navigate(['login'], { state: { redirectUrl: state.url }});
Комментарии:
1. спасибо за комментарий. Но он не работает, показывая, что этот аргумент ошибки типа ‘{ state: { redirectUrl: string; }; }’ не может быть присвоен параметру типа ‘NavigationExtras’. Литерал объекта может указывать только известные свойства, а ‘state’ не существует в типе ‘NavigationExtras’.
2. Какую версию angular вы используете?
3. angular 10. Есть ли какие-либо другие доступные решения?
Ответ №2:
В компоненте, на который перенаправляется. Поместите этот фрагмент кода.
import { Location } from "@angular/common";
constructor(private location: Location) {}
ngOInit() {
this.cleanURL();
}
cleanURL() {
// Use this method where its needed.
this.location.replaceState('login');
}
Комментарии:
1. спасибо за ваш ответ. Это работает с первой попытки. Но когда я перезагружаю страницу входа, она не перенаправляется на «getup»