Как сделать ссылку на угловой маршрут со статической веб-страницы / Добавьте ссылку в браузер
У нас есть устаревшее приложение (SpringMVC/JSP/Tiles), которое мы переносим на Angular 6. Подход заключается в том, чтобы переносить по одному модулю за раз. В настоящее время в унаследованном приложении есть несколько ссылок / форм, по которым пользователь может щелкнуть, и он будет перенаправлен на перенесенные модули. Мы используем следующий подход для достижения этой цели:
Создайте представления для сопоставления с различными модулями в нашем приложении Spring (views.properties):
module1.(class)=org.springframework.web.servlet.view.JstlView
module1.url=/angular/index.html
module2.(class)=org.springframework.web.servlet.view.JstlView
module2.url=/angular/index.html
У нас есть страница JSP, на которой есть ссылки для перенаправления на эти страницы. Где мы вызываем функцию javascript для установки строки в 'sessionStorage', которая используется для перенаправления пользователя в нужный модуль.
<input type="button" value="Goto Module 1" onClick="gotoModule(1)">
<input type="button" value="Goto Module 2" onClick="gotoModule(2)">
И JavaScript:
function gotoModule(moduleNum) {
sessionStorage.setItem("target","MODULE_"+moduleNum);
window.location.href = "<%=ctxt %>/controller/method.do;
}
Здесь контроллер просто возвращает одно из представлений, определенных выше.
См. Ниже код компонента приложения ("app.component.ts"), где sessionStorage используется для перенаправления пользователя по нужному пути.
ngOnInit(){
...
const target = sessionStorage.getItem('target');
switch (target) {
case 'MODULE_1':
this.router.navigate(['/module_1'], { skipLocationChange: true });
break;
case 'MODULE_2':
this.router.navigate(['/module_2'], { skipLocationChange: true, preserveQueryParams: true });
break;
default:
this.router.navigate(['/access-denied'], { skipLocationChange: true });
break;
}
Не уверен, что это лучший подход для достижения этой цели, но он служит нашей цели.
Теперь у пользователя есть требование и он хочет пометить прямые URL-адреса (для module_1 и module_2) в своем браузере. Я попытался отправить параметры запроса (изменил перечисленные выше свойства views.properties, чтобы включить параметры запроса в URL), но не смог получить значения параметров в конце Angular. Я пробовал следующее, но нигде не вижу параметров:
- Получение параметров запроса в компоненте приложения
- Получение значений в защите маршрутизатора с использованием "ActivatedRoute"
- Получение значений в защите маршрутизатора с помощью "ActivateRouteSnapshot"
- Написание HttpInterceptor
Основная проблема заключается в том, что ни один из них даже не активируется / не срабатывает, если я даю прямой URL-адрес в новом браузере (например, при нажатии на закладку).
Уже несколько часов бьюсь головой и буду рад любым указателям в правильном направлении.
Пожалуйста, потерпите меня, если это кажется надуманным подходом, поскольку я относительно новичок в Angular и все еще учусь на ходу.