Как сделать ссылку на угловой маршрут со статической веб-страницы / Добавьте ссылку в браузер

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

0 ответов

Другие вопросы по тегам