Você pode navegar para a rota atual com novos parâmetros de consulta, que não irão recarregar sua página, mas irão atualizar os parâmetros de consulta.
Algo como (no 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
});
}
Observe que, embora não recarregue a página, ele enviará uma nova entrada ao histórico do navegador. Se quiser substituí-lo no histórico em vez de adicionar um novo valor lá, você pode usar { queryParams: queryParams, replaceUrl: true }
.
EDIT: Como já foi apontado nos comentários, []
e a relativeTo
propriedade estava faltando no meu exemplo original, então poderia ter mudado a rota também, não apenas parâmetros de consulta. O this.router.navigate
uso adequado será neste caso:
this.router.navigate(
[],
{
relativeTo: this.activatedRoute,
queryParams: { myParam: 'myNewValue' },
queryParamsHandling: 'merge'
});
Definir o novo valor do parâmetro como null
removerá o parâmetro do URL.
Radosław Roszkowiak
fonte
[]
vez de['.']
fazer funcionarthis.activatedRoute.queryParams.subscribe
e fazer várias atualizações em seu componente, mas existe uma maneira simples de Angular carregar a rota de forma que o avanço e a retrocesso funcionem automaticamente?A resposta de @Radosław Roszkowiak está quase certa, exceto que
relativeTo: this.route
é exigida conforme abaixo:fonte
No Angular 5, você pode obter e modificar facilmente uma cópia do urlTree analisando o url atual. Isso incluirá parâmetros de consulta e fragmentos.
A "maneira correta" de modificar um parâmetro de consulta é provavelmente com o createUrlTree como abaixo, que cria um novo UrlTree a partir do atual enquanto nos permite modificá-lo usando NavigationExtras .
Para remover um parâmetro de consulta dessa forma, você pode defini-lo como
undefined
ounull
.fonte
navigateByUrl
é diferentenavigate
- não apenas com o parâmetro UrlTree. Consulte stackoverflow.com/a/45025432/271012Experimentar
funcionará para a mesma navegação de rota, exceto aspas simples.
fonte
A resposta com mais votos parcialmente funcionou para mim. O URL do navegador permaneceu o mesmo, mas meu
routerLinkActive
não estava mais funcionando após a navegação.Minha solução foi usar lotation.go:
Usei HttpParams para construir a string de consulta, pois já o estava usando para enviar informações com httpClient. mas você mesmo pode construí-lo.
e
this._router.url.split("?")[0]
, é remover todas as strings de consulta anteriores do url atual.fonte
this.location.path().split...
melhor?Acabei combinando
urlTree
comlocation.go
Não tenho certeza se
toString
pode causar problemas, maslocation.go
, infelizmente , parece ser baseado em string.fonte
Se você deseja alterar os parâmetros de consulta sem alterar a rota. veja o exemplo abaixo pode ajudá-lo: a rota atual é: / search & A rota de destino é (sem recarregar a página): / search? query = love
observação: você pode usar this.router.navigate (['pesquisar'] em vez de this.router.navigate (['.']
fonte
relativeTo:
, mas.then()
foi útil - não sabia que navegar () retornou uma promessa, que bom que você postou!Primeiro, precisamos importar o módulo do roteador do roteador angular e declarar seu nome de alias
1. Você pode alterar os parâmetros de consulta usando a função "router.navigate" e passar os parâmetros de consulta
Irá atualizar os parâmetros de consulta na rota atual, ou seja, ativada
O abaixo irá redirecionar para a página abc com _id, dia e nome como parâmetros de consulta
this.router.navigate (['/ abc'], {queryParams: {_id: "abc", dia: "1", nome: "dfd"}});
Ele irá atualizar os parâmetros de consulta na rota "abc" junto com três parâmetros de consulta
Para buscar parâmetros de consulta: -
fonte