我们有一个遗留应用程序(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端获取参数值。我已经尝试了以下操作,但是在任何地方都看不到参数:
主要问题是,如果我在新的浏览器中提供了直接URL(例如单击书签时),这些都不会被激活/触发。
现在已经动了好几个小时,很高兴能向正确的方向伸出手指。
请耐心等待,因为这似乎是一种人为设计的方法,因为我对Angular相对较新,并且仍在学习中。