从queryParams angular 2中删除参数

sti*_*rts 19 angular

我使用查询参数导航到我的应用中的某个页面.从URL中获取参数后我想删除它,理想情况下我会这样:

let userToken: string;
    this.sub = this.router
      .routerState
      .queryParams
      .subscribe(params => {
        userToken = params['token'];
        params['token'].remove();
      });
Run Code Online (Sandbox Code Playgroud)

但显然删除功能不存在.有人有替代方案吗?

Mik*_*One 40

以防人们找到这个帖子(就像我做的那样).我有一个场景,我在查询字符串中收到一个JWT令牌(/ login?jwt = token).我需要获取此令牌(并存储它等),但随后需要确保从URL中安全地删除它.重新加载登录路由(通过使用this.router.navigate(['login'])在principe中工作,然而,用户可以使用浏览器后退按钮,基本上重放令牌登录.

我通过不使用导航但通过DI''位置'服务(来自@ angular/common)解决了这个问题.此服务具有'replaceState'方法,该方法从历史记录以及URL中完全删除令牌

 this.location.replaceState('login')
Run Code Online (Sandbox Code Playgroud)

希望能帮助别人.


小智 25

您可以分配null给特定的queryParam:

this.router.navigate([], {queryParams: {page: null}, queryParamsHandling: 'merge'});

  • 我用过这样的东西`this.router.navigate(['/home'], {queryParams: {verify_email_token: null}, queryParamsHandling: 'merge'});` 但它不起作用 (2认同)

Pau*_*ero 8

强制性方法,但更简洁:

this.router.navigate(['.'], { relativeTo: this.route, queryParams: {} });