我试图有条件地将角度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 . 防止角度将参数转换为矩阵参数 .

感谢您提供的任何帮助