Angular 7使用querystring

时间:2019-04-01 10:26:59

标签: angular typescript

我正在将Angular 7与Type脚本一起使用。

我需要能够在新选项卡中使用queryString浏览到组件

当前我正在使用类似的东西

const url = myBaseUrl +'\ 0?param1 = 123&param2 = 321' window.open(url,'_blank');

,这确实浏览到正确的页面,但是在加载时,对queryString进行了清理,因此看起来像这样 myBaseUrl / 0%3param1%3D123&param2%3D321

这破坏了整个过程。

有没有办法防止Angular更改URL?

3 个答案:

答案 0 :(得分:0)

您需要单独提供它,如下所示:

this.router.navigate([myBaseUrl + '\0'], { queryParams: { 'param1': 123, 'param2': 321 } });

答案 1 :(得分:0)

您可以在此处进行以下操作:

<p>Here is your value: <b><?= $value ?></b></p>

答案 2 :(得分:0)

对于任何面临类似问题的人,这里都是我如何解决问题。

原来的原因是我们的身份验证拦截了URL调用并验证了访问令牌。 然后,当URL以角度传递回时,它包含一个id_token。删除了令牌后,URL再次被拦截,然后使用角度路由器路由整个URL。

this.router.navigate([entireUrl]);

这是导致查询字符串更改的原因。 我必须检查URL吗?表示它有一个查询字符串,将其从主url中分离出来,将查询字符串转为一个对象,并使用路由器导航正确添加的查询参数

if (url.includes('?')) {
    let baseRoute: string = url;
    const splitRoute = baseRoute.split('?');
    baseRoute = splitRoute[0];
    const paramsObj = this.getRouteParamsObject(splitRoute[1]);
    this.router.navigate([baseRoute], {queryParams: paramsObj});
} else {
    this.router.navigate([url]);
}

private getRouteParamsObject(paramString: string): any {
  const pairs = paramString.split('&');
  const result = {};
  pairs.forEach((pair: any) =>  {
      pair = pair.split('=');
      result[pair[0]] = decodeURIComponent(pair[1] || '');
  });

  return JSON.parse(JSON.stringify(result));
}

我希望这对您也有帮助。 非常感谢Niraj的帮助