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

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

...