Búsqueda de sitios web

javascript - Angular eliminar parámetro de consulta


¿Cómo eliminaría un parámetro de consulta de la URL? Por ejemplo, de www.expample.com/home?id=123&pos=sd&sd=iii a www.expample.com/home?id=123&sd=iii

EDITAR: Esta es mi versión:

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

Respuesta #1

Puedes eliminar un parámetro de consulta utilizando la opción merge de queryParamsHandling y pasando null para cualquier parámetro que desees eliminar.

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

Esta opción es más sencilla y requiere menos trabajo para asegurarse de que no estás eliminando otros parámetros. Tampoco necesitas preocuparte por limpiar una suscripción observable cuando tu componente se destruye.

Respuesta #2

ACTUALIZACIÓN: La respuesta de @epelc a continuación es la forma actualizada y correcta de hacer esto: https://stackoverflow.com/a/52193044/5932590.

Desafortunadamente, actualmente no hay una forma clara de hacer esto: https://github.com/angular/angular/issues/18011. Sin embargo, como comentó jasonaden en el hilo vinculado,

Esto se podría hacer manualmente combinando los parámetros de consulta antiguos y nuevos, eliminando la clave que no deseas.

Aquí hay una manera de hacer eso:

Digamos que tienes tus queryParams almacenados en algunas propiedades.

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');
    });
  }
}

Un método para limpiar el parámetro pos se vería así:

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

Esto navegará efectivamente a la ruta actual y borrará tu parámetro de consulta pos, manteniendo los demás parámetros de consulta igual.

Artículos relacionados