如何从静态网页链接到Angular路线/在浏览器中为链接添加书签

时间:2018-12-05 23:06:13

标签: angular spring-mvc angular-routing angular-router-guards

我们有一个遗留应用程序(SpringMVC / JSP / Tiles),正在迁移到Angular6。该方法是一次迁移一个模块。当前,旧版应用程序具有用户可以单击的一些链接/表格,他将被定向到要迁移的模块。我们正在使用以下方法实现这一目标:

创建视图以映射到我们的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 个答案:

没有答案