У нас есть устаревшее приложение (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, и я все еще учусь, как мы идем.