Estou usando o angular 5.0.3, gostaria de iniciar meu aplicativo com vários parâmetros de consulta como /app?param1=hallo¶m2=123
. Todas as dicas fornecidas em Como obter parâmetros de consulta a partir do URL no Angular 2? Nao funciona para mim.
Alguma idéia de como os parâmetros de consulta funcionam?
private getQueryParameter(key: string): string {
const parameters = new URLSearchParams(window.location.search);
return parameters.get(key);
}
Essa função privada me ajuda a obter meus parâmetros, mas não acho que seja o caminho certo no novo ambiente Angular.
[update:] Meu aplicativo principal parece
@Component({...})
export class AppComponent implements OnInit {
constructor(private route: ActivatedRoute) {}
ngOnInit(): void {
// would like to get query parameters here...
// this.route...
}
}
Respostas:
No Angular 5, os parâmetros de consulta são acessados assinando
this.route.queryParams
.Exemplo:
/app?param1=hallo¶m2=123
enquanto que as variáveis de caminho são acessadas por
this.route.snapshot.params
Exemplo:
/param1/:param1/param2/:param2
fonte
Esta é a solução mais limpa para mim
fonte
Eu sei que o OP pediu a solução Angular 5, mas ainda assim para todos vocês que se deparam com essa pergunta em versões Angular mais novas (6+). Citando os Documentos , sobre ActivatedRoute.queryParams (em que a maioria das outras respostas se baseia):
De acordo com o Documentos , a maneira simples de obter os parâmetros de consulta seria assim:
Para formas mais avançadas (por exemplo, reutilização avançada de componentes), consulte este capítulo do Documentos.
EDITAR:
Como indicado corretamente nos comentários abaixo, esta resposta está errada - pelo menos no caso especificado pelo OP.
O OP pede para obter parâmetros globais de consulta (/ app? Param1 = hallo & param2 = 123); Nesse caso, você deve usar queryParamMap (assim como na resposta dapperdan1985).
O paramMap, por outro lado, é usado em parâmetros específicos da rota (por exemplo, / app /: param1 /: param2, resultando em / app / hallo / 123).
Obrigado a @JasonRoyle e @daka por apontar isso.
fonte
queryParamMap
nãoparamMap
buscar parâmetros da string de consulta?paramMap
não funciona.Você também pode usar HttpParams , como:
fonte
path: '', redirectTo: '/list'
. O this.route.snapshot não funciona para mim porque redirecionaTo / list que elimina a queryString 'lang'. Mas esta solução funciona para mim.ATUALIZAR
fonte
seu trabalho para mim:
veja mais opções Como obter parâmetros de consulta a partir do URL em angular2?
fonte
Deparei com essa questão quando procurava uma solução semelhante, mas não precisava de nada como roteamento completo no nível do aplicativo ou mais módulos importados.
O código a seguir funciona muito bem para o meu uso e não requer módulos ou importações adicionais.
http://localhost:4200/?param1=hello¶m2=123
saídas:fonte
Parâmetros de consulta e caminho (Angular 8)
Para URL como https://myapp.com/user/666/read?age=23, use
ATUALIZAR
Caso você use
this.router.navigate([someUrl]);
e seus parâmetros de consulta sejam incorporados àsomeUrl
string, o angular codifica uma URL e você obtém algo como https://myapp.com/user/666/read%3Fage%323 - e a solução acima dará um resultado errado ( queryParams estará vazio e os parâmetros do caminho podem ser colados no último parâmetro do caminho, se estiver no final do caminho). Nesse caso, altere o modo de navegação para estefonte
Infelizmente, a solução mais limpa não é a solução mais extensível. Nas versões recentes do Angular, é sugerido nas outras respostas que você pode facilmente obter os parâmetros de consulta usando o ActivatedRoute Injectible e utilizando especificamente a propriedade snapshot:
ou a propriedade subscrever (usada nos casos em que a string de consulta será atualizada, por exemplo, navegando pelos IDs do usuário):
Estou aqui para dizer que essas soluções têm uma falha que não foi resolvida há algum tempo: https://github.com/angular/angular/issues/12157
Em suma, a única solução à prova de balas é usar o bom e velho javascript de baunilha. Nesse caso, criei um serviço para manipulação de URL:
fonte
O Angular Router fornece o método parseUrl (url: string) que analisa o URL no UrlTree . Uma das propriedades do UrlTree é queryParams. Então você pode fazer algo como:
fonte
Quando você tem um objeto de rota vazio, isso se deve principalmente ao fato de você não estar usando uma tomada do roteador no app.component.html.
Sem isso, você não poderá obter um objeto de rota significativo com subObjects não vazios, particularmente params e queryParams.
Tente adicionar um
<router-outlet><router-outlet>
pouco antes de ligar para o seu<app-main-component></app-main-component>
Antes disso, verifique se você tem seus parâmetros de consulta prontos no roteamento de aplicativos> que exportam a classe Route usada pelo componente App:
Última coisa, é claro, para obter seus parâmetros, eu
this.route.snapshot.params.dynamicParam
pessoalmente uso em que dynamicParam é o nome usado no componente de roteamento de aplicativos :)fonte
Tenha cuidado com suas rotas. Um "redirectTo" removerá | descarte qualquer parâmetro de consulta.
Chamei meu componente principal com parâmetros de consulta como "/ main? Param1 = a & param2 = b e presumo que meus parâmetros de consulta cheguem ao método" ngOnInit () "no componente principal antes que o redirecionamento de redirecionamento tenha efeito.
Mas isso está errado. O redirecionamento veio antes, elimine os parâmetros de consulta e chame o método ngOnInit () no componente principal sem parâmetros de consulta.
Alterei a terceira linha das minhas rotas para
e agora meus parâmetros de consulta estão acessíveis nos principais componentes ngOnInit e também no PageOneComponent.
fonte
Encontrado em: Componentes pai fica Params vazio do ActivatedRoute
Trabalhou para mim:
fonte
Acabei de encontrar o mesmo problema e a maioria das respostas aqui parece resolvê-lo apenas para o roteamento interno Angular e, em seguida, algumas delas para parâmetros de rota que não são iguais aos parâmetros de solicitação.
Acho que tenho um caso de uso semelhante à pergunta original de Lars.
Para mim, o caso de uso é, por exemplo, rastreamento de referência:
Angular em execução
mycoolpage.com
, com roteamento de hash, entãomycoolpage.com
redireciona paramycoolpage.com/#/
. Para referência, no entanto, um link comomycoolpage.com?referrer=foo
também deve ser utilizável. Infelizmente, o Angular retira imediatamente os parâmetros de solicitação, indo diretamente paramycoolpage.com/#/
.Qualquer tipo de 'truque' ao usar um componente vazio + AuthGuard e obter
queryParams
ouqueryParamMap
não, infelizmente, não funcionou para mim. Eles estavam sempre vazios.Minha solução hacky acabou sendo lidar com isso em um pequeno script no
index.html
qual obtém a URL completa, com parâmetros de solicitação. Em seguida, pego o valor do parâmetro de solicitação por meio de manipulação de string e o defino no objeto window. Um serviço separado lida com a obtenção do ID do objeto da janela.script index.html
Serviço
fonte
fonte
http: // localhost: 4200 / products? order = popular
Podemos acessar o parâmetro de consulta de pedidos como este:
Há também queryParamMap, que retorna um observável com um objeto paramMap.
Dado o seguinte URL de rota:
http: // localhost: 4200 / products? order = popular & filter = new
Fonte - https://alligator.io/angular/query-parameters/
fonte
No, acho que o Angular 8:
ActivatedRoute.params
foi substituído porActivatedRoute.paramMap
ActivatedRoute.queryParams
foi substituído porActivatedRoute.queryParamMap
fonte
fonte
Se você não estiver usando o roteador Angular, tente, querystring . Instale-o
ao seu projeto. No seu componente, faça algo parecido com isto
O
substring(1)
é necessário, porque se você tiver algo parecido com isto'/mypage?foo=bar'
, o nome da chave será?foo
fonte