Пожалуйста помоги!
Итак, у меня есть следующий URL
https://xxx.io/#/route1/yyyyyyyy?tj=3&bd=7
И когда я перехожу к нему, у меня появляется следующий код:
this.route.queryParams.subscribe((res: any) => {
console.info('tj: ' + res.tj)
console.info('bd: ' + res.bd)
Теперь это печатает то, что я ожидал, а именно tj: 3 и bd: 7.
Но когда я обновляю экран, res.tj и res.bd не определены. Как это может быть?
Первоначально это происходило, потому что я заметил, что URL-адрес, когда я обновил экран, изменился на:
https://xxx.io/#/route1/yyyyyyyy%3D3&bd%3D7
Но это было из-за проблем с кодировкой URL-адресов, поэтому я добавил CustomUrlSerializer, например:
import { UrlSerializer, UrlTree, DefaultUrlSerializer } from '@angular/router';
export class CustomUrlSerializer implements UrlSerializer {
parse(url: string): UrlTree {
const dus = new DefaultUrlSerializer();
return dus.parse(url);
}
serialize(tree: UrlTree): any {
const dus = new DefaultUrlSerializer();
let path = dus.serialize(tree);
return path.replace("%3F", "?").replace(/%3D/g, " = ");
}
}
И это устранило эту проблему, поэтому URL-адрес снова верен после обновления:
https://xxx.io/#/route1/yyyyyyyy?tj=3&bd=7
Но res.tj и ts.bd все еще не определены !!!
Застряли на этом в течение нескольких часов, поэтому надеемся, что кто-то сможет пролить свет на то, почему это происходит и как я могу это исправить?
Спасибо!
Да, а затем передайте параметры запроса в качестве дополнительных элементов навигации ...
Это может быть глупый вопрос (не очень знаком с маршрутизацией Angular), но откуда эта часть URL-адреса # / anchor? Мне кажется очень странным, чтобы параметры запроса были после хэштегом в URL-адресе. Можете ли вы опубликовать пример того, как вы генерируете эти URL-адреса и как определяются ваши маршруты?
Знак # здесь из-за HashLocationStrategy, которую я использую. Не думайте, что это проблема, поскольку маршрут успешно имеет параметры запроса, когда я перехожу к этому URL-адресу в первый раз, но затем при обновлении он не определен ...
Можете ли вы предоставить образец кода при вызове navigate?
ты можешь попробовать? preserveQueryParams: true; читайте здесь: angular.io/api/router/NavigationExtras
@Vivek Ага, это сработало, большое спасибо!
@Buczkowski благодарит за помощь.
@Jeto спасибо за помощь.
@ user1974753 хорошо, я добавлю это в качестве ответа, возможно, кому-то еще будет проще искать.





Интерфейс Angular Навигация имеет свойство preserveQueryParams, установка его на true может помочь в вашем случае
Типичное использование:
this.router.navigate(['/view'], { preserveQueryParams: true });
Как изменить URL-адрес? По
Routernavigate?