Удалить параметр из queryParams angular 2
Я перехожу к определенной странице в своем приложении с параметром запроса.
После того, как я получу параметр из URL-адреса, я хочу его удалить, в идеале я бы это сделал:
let userToken: string;
this.sub = this.router
.routerState
.queryParams
.subscribe(params => {
userToken = params['token'];
params['token'].remove();
});
Но, очевидно, функция удаления не существует. Есть ли у кого-то альтернатива?
Ответы
Ответ 1
На всякий случай, если люди найдут эту ветку (как и я). У меня есть сценарий, который я получаю токен JWT в строке запроса (/login?jwt=token
). Мне нужно было получить этот токен (и сохранить его и т.д.), Но затем нужно было убедиться, что он благополучно удален из URL. Перезагрузка маршрута входа в систему (с помощью this.router.navigate(['login']
) работает в principe, однако пользователь может затем использовать кнопку возврата браузера, в основном воспроизводя логин токена.
Я решил это, не используя навигацию, а добавив сервис "Местоположение" (из @angular/common
). Этот сервис имеет метод replaceState
, который полностью удаляет токен из истории, а также из URL.
this.location.replaceState('login')
Надеюсь, что это помогает кому-то.
Ответ 2
Вы можете назначить null
конкретному запросуParam:
this.router.navigate([], {queryParams: {page: null}, queryParamsHandling: 'merge'});
Ответ 3
ОБНОВЛЕНИЕ Нет необходимости добавлять queryParams в rc6 больше.
Не уверен, что это так:
После маршрутизации к компоненту с параметрами запроса все остальные URL-адреса этого компонента автоматически содержат параметры запроса. Каждый раз, когда вы переходите к другому URL-адресу, параметры запроса остаются.
Если это так, одно из возможных решений может быть в параметрах запроса в теге html
<a [routerLink]="['/abcd']" [queryParams]="{}">
Если нет, я также заинтересован в ответе: P
Ответ 4
Императивный метод, но очиститель:
this.router.navigate(['.'], { relativeTo: this.route, queryParams: {} });
Ответ 5
Я использую метод маршрутизатора navigateByUrl
.
Альтернативный документ: Angular документация
Имейте в виду, что путь, которым вы его кормите, считается абсолютным. Вы не можете использовать относительную маршрутизацию компонентов с помощью этого метода.
Мое использование у меня есть компонент, который служит в качестве внешнего обратного вызова для событий auth, таких как сброс пароля и проверка электронной почты. По завершении операции любое действие навигации должно происходить через router.navigateByUrl(path)
Ответ 6
HTML5 включает API history.pushState, который позволяет добавлять записи истории и изменять URL-адрес, отображаемый в настоящее время в браузере. (Управление историей браузера)
window.history.pushState('', 'title', '/expected-url');
Вы можете использовать эту строку кода в вашем приложении Angular2. Это просто изменит URL, а не состояние приложения. (параметр запроса результатов удаляет из заданного URL)
Ответ 7
Я искал ответ так, когда хотел удалить параметр access_token из url. Если вам просто нужно удалить один параметр и сохранить другие параметры.
setTimeout(() => {
let urlWithoutAccessToken = this.router.url.replace(new RegExp('.access_token=' + idToken), '');
this.router.navigateByUrl(urlWithoutAccessToken);
}, 0);
По какой-то причине был необходим setTimeout, navigateByUrl не работал без него.
Ответ 8
Я хотел бы предложить этот способ, который совместим со всеми стратегиями маршрутизации Angular X:
this.route.queryParams.subscribe(params => {
let token = params['jwt'];
if (token) {
this.cache.set({t: 't'}, token);
window.location.href = this.router.url.split('?')[0];
}
});