Angular 5删除查询参数

Naz*_*iuk 26 javascript typescript angular

如何从URL中删除查询参数.例如来自www.expample.com/home?id=123&pos=sd&sd=iiimakewww.expample.com/home?id=123&sd=iii

编辑:我的版本

this.activatedRoute.queryParams.subscribe(c => {
  const params = Object.assign({}, c);
  delete params.dapp;
  this.router.navigate([], { relativeTo: this.activatedRoute, queryParams: params });
}).unsubscribe();
Run Code Online (Sandbox Code Playgroud)

epe*_*elc 44

您可以使用merge选项删除查询参数,queryParamsHandlingnull为要删除的任何参数传入.

// Remove query params
this.router.navigate([], {
  queryParams: {
    yourParamName: null,
    youCanRemoveMultiple: null,
  },
  queryParamsHandling: 'merge'
})
Run Code Online (Sandbox Code Playgroud)

此选项更简单,需要更少的工作,以确保您不删除其他参数.在销毁组件时,您也不必担心清理可观察的订阅.

  • 值得注意的是,这会触发导航事件。我在清除角度防护内的参数时遇到问题 - 导航被取消 (2认同)
  • 您可以使用选项“skipLocationChange”来防止它触发导航事件。 (2认同)

vin*_*nce 12

不幸的是,目前没有明确的方法:https://github.com/angular/angular/issues/18011.但是,正如jasonaden评论链接线程,

这可以通过合并旧的和新的查询参数手动完成,删除您不想要的密钥.

这是一种方法:

假设您将queryParams存储在某些属性中.

class MyComponent() {
  id: string;
  pos: string;
  sd: string;

  constructor(private route: ActivatedRoute, private router: Router) {}

  ngOnInit() {
    this.route.url.subscribe(next => {
      const paramMap = next.queryParamMap;
      this.id = paramMap.get('id');
      this.pos = paramMap.get('pos');
      this.sd = paramMap.get('sd');
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

清除pos参数的方法如下所示:

clearPosParam() {
  this.router.navigate(
    ['.'], 
    { relativeTo: this.route, queryParams: { id: this.id, sd: this.sd } }
  );
}
Run Code Online (Sandbox Code Playgroud)

这将有效导航到当前路由并清除您的pos查询参数,使您的其他查询参数保持不变.

  • 这会泄漏可观察的订阅。“路由器”不会自动清除对“ route.url.subscribe”的订阅,在组件被销毁时必须手动跟踪和处置。请考虑以下我的答案,该答案不需要任何订阅,而且更简单。 (2认同)