我试图有条件地将角度2路由重定向到包含查询字符串参数的外部URL .
I.E用户将点击用户配置文件按钮下拉列表中的链接,如果服务器先前已经指示它们属于特定公司,则它将链接到外部页面,否则该相同按钮将通过正常的角度单页面应用程序路由系统 .
我当前的方法涉及订阅导航开始事件并将窗口位置href更改为指向外部网站 .
根据我如何处理此任务,我遇到了两个不同的问题
1 .
如果查询字符串与routerLink路径一起传递,则查询字符串在传递到远程网站之前进行转义 .
如果我在订阅中更正了这一点,浏览器后退按钮仍将返回到未修正的URL .
例如以下代码
在html模板中 .
<a [routerLink]="['/profile?id=1']" > profile </a>
并在app.component中
this.router.events.subscribe((event) => {
if (event instanceof NavigationStart) {
if(conditional logic here){
let url: string = "http://example.com" + event.url
window.location.href = url;
}
}
}
结果在网址http://example.com/profile%3Fid%3D1
如果我在订阅中替换转义,它将变为http://example.com/profile?id=1但是浏览器后退按钮会转到损坏的网址并加载错误页面 .
2 .
由于上述错误,我试图通过路由器链接中的give参数传递查询字符串,如下面的SO问题所述 .
How to handle query parameters in angular 2
新的路由器链接看起来像
轮廓
并生成如下http://lample.com?0=%3F&1=i&2=d&3=%3D&4=1的网址
这似乎是使用子路由,因此如此帖子中提到的矩阵参数 .
我不确定为什么会这样,因为我的routing.ts很简单并且不包含子节点 .
const routes: Routes = [
{path: '**', component: RouteComponent}];
@NgModule({
imports: [ RouterModule.forRoot(routes) ],
exports: [ RouterModule ]
})
export class RoutingModule { }
此外,它似乎仍然逃避特殊字符
我的第一个问题是,是否有官方或更好的方式将角度路由重定向到外部网站(包括查询字符串参数)
如果没有,我会很感激有关如何做的任何想法
一个 . 防止angular转义查询字符串参数
湾在我替换转义字符之前阻止后退按钮识别网址 . (比如取消导航开始事件)
C . 防止角度将参数转换为矩阵参数 .
感谢您提供的任何帮助