скрытие параметров запроса в URL-адресе браузера в angular

#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»