Puede navegar a la ruta actual con nuevos parámetros de consulta, que no volverán a cargar su página, pero actualizarán los parámetros de consulta.
Algo como (en el componente):
constructor(private router: Router) { }
public myMethodChangingQueryParams() {
const queryParams: Params = { myParam: 'myNewValue' };
this.router.navigate(
[],
{
relativeTo: activatedRoute,
queryParams: queryParams,
queryParamsHandling: 'merge', // remove to replace all query params by provided
});
}
Tenga en cuenta que, si bien no volverá a cargar la página, enviará una nueva entrada al historial del navegador. Si desea reemplazarlo en el historial en lugar de agregar un nuevo valor allí, puede usar { queryParams: queryParams, replaceUrl: true }
.
EDITAR: Como ya se señaló en los comentarios, []
y la relativeTo
propiedad faltaba en mi ejemplo original, por lo que también podría haber cambiado la ruta, no solo los parámetros de consulta. El this.router.navigate
uso adecuado será en este caso:
this.router.navigate(
[],
{
relativeTo: this.activatedRoute,
queryParams: { myParam: 'myNewValue' },
queryParamsHandling: 'merge'
});
Establecer el nuevo valor del parámetro en null
eliminará el parámetro de la URL.
Radosław Roszkowiak
fuente
[]
lugar de['.']
hacerlo funcionarthis.activatedRoute.queryParams.subscribe
y hacer varias actualizaciones en su componente, pero ¿existe una forma angular simple de cargar la ruta de manera que el avance y el retroceso funcionen automáticamente?La respuesta de @ Radosław Roszkowiak es casi correcta, excepto que
relativeTo: this.route
se requiere como se muestra a continuación:fuente
En Angular 5, puede obtener y modificar fácilmente una copia de urlTree analizando la url actual. Esto incluirá parámetros de consulta y fragmentos.
La "forma correcta" de modificar un parámetro de consulta es probablemente con createUrlTree, como se muestra a continuación, que crea un nuevo UrlTree a partir del actual y nos permite modificarlo mediante NavigationExtras .
Para eliminar un parámetro de consulta de esta manera, puede establecerlo en
undefined
onull
.fuente
navigateByUrl
es diferente anavigate
, no solo con el parámetro UrlTree. Ver stackoverflow.com/a/45025432/271012Tratar
funcionará para la navegación por la misma ruta que no sean comillas simples.
fuente
La respuesta con más votos me funcionó parcialmente. La URL del navegador se mantuvo igual, pero mi
routerLinkActive
ya no funcionaba después de la navegación.Mi solución fue usar lotation.go:
Usé HttpParams para construir la cadena de consulta ya que ya la estaba usando para enviar información con httpClient. pero puedes construirlo tú mismo.
y el
this._router.url.split("?")[0]
, es eliminar toda la cadena de consulta anterior de la URL actual.fuente
this.location.path().split...
mejor?Terminé combinándome
urlTree
conlocation.go
No estoy seguro si
toString
puede causar problemas, pero desafortunadamentelocation.go
, parece estar basado en cadenas.fuente
Si desea cambiar los parámetros de consulta sin cambiar la ruta. Vea el ejemplo a continuación que podría ayudarlo: la ruta actual es: / búsqueda y la ruta de destino es (sin página de recarga): / search? query = love
tenga en cuenta: puede utilizar this.router.navigate (['buscar'] en lugar de this.router.navigate (['.']
fuente
relativeTo:
, pero.then()
fue útil: no sabía que navigate () devolvió una promesa, ¡me alegro de que haya publicado!Primero, necesitamos importar el módulo del enrutador desde el enrutador angular y declarar su nombre de alias
1. Puede cambiar los parámetros de consulta mediante la función "router.navigate" y pasar los parámetros de consulta
Actualizará los parámetros de consulta en la ruta activada actual
Lo siguiente redirigirá a la página abc con _id, día y nombre como parámetros de consulta
this.router.navigate (['/ abc'], {queryParams: {_id: "abc", día: "1", nombre: "dfd"}});
Actualizará los parámetros de consulta en la ruta "abc" junto con tres parámetros de consulta
Para obtener parámetros de consulta: -
fuente