Angular - генерировать routerLink с дополнительным маршрутом - PullRequest
0 голосов
/ 13 февраля 2020

С помощью Angular 8 я создал страницу «обратного вызова при входе», которая должна перенаправлять (по ссылке или автоматически) на предыдущую страницу. Но предыдущая страница может содержать некоторые вторичные маршруты.

Итак, чтобы избежать «полной перезагрузки» страницы навигации, я попытался использовать [routerLink] в шаблоне для построения «go to previous page» Кнопка и «this.router.navigate (...)» внутри контроллера, если я хочу перенаправить программно.

Проблема в том, что Angular не может правильно сериализовать вторичный маршрут (с круглыми скобками) )

Пример:

Контроллер:

constructor(private router: Router){}

public redirectRoute: string;

onInit() {
  this.redirectRoute = '/home(modal:modal/secondary);param1=value1';
}

Шаблон:

<a [routerLink]="redirectRoute">Go to previous page</a>

URL-адрес встроенной круглой скобки, ( становится % 28 и ) становится % 29 . Таким образом, навигация завершается неудачно, маршрут не распознается и происходит откат по маршруту по умолчанию.

На самом деле «redirectRoute» является динамическим c, поэтому я не ищу ответ типа «build redirectRoute» в шаблоне. напрямую». Конечно, это работает, но я не могу.

Я пробовал много вещей; Я могу разобрать URL (с this.router.parseUrl(rawRedirectUrl);), он возвращает хорошее URLTree (вторичный маршрут сформирован правильно), но я не могу найти, как использовать URLTree в теге [routerLink].

То же самое произошло, если я хочу перенаправить с помощью this.router.navigate(this.redirectRoute) ...

Как правильно перенаправить без перезагрузки всей страницы?

Спасибо!

[EDIT]

Я открыл https://github.com/angular/angular/issues/35414

1 Ответ

0 голосов
/ 13 февраля 2020

Ссылка на маршрутизатор также принимает дерево URL.

Таким образом:

<a [routerLink]="[ '/home', {param: 123 } ]">Home</a>

Будет сгенерирована ссылка '/home;param=123'.

Пример здесь: https://stackblitz.com/edit/angular-qcpcoy

Пример стекаблица маршрутизирует между двумя компонентами. Я создаю свои ссылки, используя приведенный выше синтаксис, а затем читаю запись параметров в консоль с помощью введенного ActivatedRoute.

constructor(private route: ActivatedRoute) {
}

ngOnInit(): void {
  console.log(this.route.snapshot.params['param']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...