Eu uso angular2.0.0-beta.7. Quando um componente é carregado em um caminho como /path?query=value1
ele é redirecionado /path
. Por que os parâmetros GET foram removidos? Como posso preservar os parâmetros?
Eu tenho um erro nos roteadores. Se eu tiver uma rota principal como
@RouteConfig([
{
path: '/todos/...',
name: 'TodoMain',
component: TodoMainComponent
}
])
e minha rota filho como
@RouteConfig([
{ path: '/', component: TodoListComponent, name: 'TodoList', useAsDefault:true },
{ path: '/:id', component: TodoDetailComponent, name:'TodoDetail' }
])
então não consigo obter parâmetros no TodoListComponent. Eu consigo
params("/my/path;param1=value1;param2=value2")
mas eu quero o clássico
query params("/my/path?param1=value1¶m2=value2")
typescript
angular
FireGM
fonte
fonte
@RouteConfig
para issopath
?Respostas:
Ao injetar uma instância de
ActivatedRoute
um, é possível assinar uma variedade de observáveis, incluindo umqueryParams
e umparams
observável:UMA NOTA RELATIVA À INSCRIÇÃO
@Reto e @ codef0rmer apontaram, com razão, que, de acordo com os documentos oficiais, um método
unsubscribe()
dentro dos componentesonDestroy()
é desnecessário neste caso. Isso foi removido do meu exemplo de código. (veja a caixa de alerta azul neste tutorial)fonte
The Router manages the observables it provides and localizes the subscriptions. The subscriptions are cleaned up when the component is destroyed, protecting against memory leaks, so we don't need to unsubscribe from the route params Observable.
Quando um URL como este http://stackoverflow.com?param1=value
Você pode obter o param1 pelo código a seguir:
fonte
Embora a pergunta especifique a versão beta 7 , ela também aparece como o principal resultado de pesquisa no Google para frases comuns, como parâmetros de consulta angular 2 . Por esse motivo, aqui está uma resposta para o roteador mais recente (atualmente em alpha.7 ).
A maneira como os parâmetros são lidos mudou dramaticamente. Primeiro, você precisa injetar a dependência chamada
Router
nos parâmetros do construtor, como:e depois disso, podemos assinar os parâmetros de consulta em nosso
ngOnInit
método (o construtor também está bom, masngOnInit
deve ser usado para testabilidade) comoNeste exemplo, lemos o parâmetro de consulta id da URL como
example.com?id=41
.Ainda há poucas coisas a serem observadas:
params
likeparams['id']
sempre retorna uma string , e isso pode ser convertido em número prefixando-o com+
.fonte
if (params.hasOwnProperty('id')) { this.selectedId = params['id'] } else { this.selectedId = params['identification']}
.Gostei muito da resposta do @ StevePaul, mas podemos fazer o mesmo sem uma chamada externa de inscrição / cancelamento de inscrição.
fonte
Para enviar parâmetros de consulta
Para receber parâmetros de consulta
Fonte oficial
fonte
Olá, você pode usar URLSearchParams, pode ler mais sobre isso aqui .
importar:
e função:
Aviso : não é suportado por todas as plataformas e parece estar no estado "EXPERIMENTAL" por documentos angulares
fonte
if (window.location.search.indexOf('?') == 0){ normalizedQueryString = window.location.search.substring(1); } else { normalizedQueryString = window.location.search; } let params = new URLSearchParams(normalizedQueryString);
Primeiro, o que eu descobri trabalhando com o Angular2 é que o URL com uma string de consulta seria/path;query=value1
Para acessá-lo em um componente que você usa, Então é isso, mas agora segue um bloco de código:
Quanto ao motivo pelo qual ele seria removido quando você carregasse o componente, esse não é o comportamento padrão. Fiz uma verificação específica em um projeto de teste limpo e não fui redirecionado ou alterado. É uma rota padrão ou algo mais especial sobre o roteamento?
Leia sobre roteamento com seqüências de caracteres e parâmetros de consulta no Tutorial do Angular2 em https://angular.io/docs/ts/latest/guide/router.html#!#query-parameters
fonte
Você pode obter os parâmetros de consulta quando transmitidos na URL usando o ActivatedRoute, conforme indicado abaixo: -
URL: - http: /domain.com? test = abc
fonte
Obter parâmetros de URL como um objeto.
fonte
Se você deseja obter o parâmetro de consulta apenas uma vez, a melhor maneira é usar o método take , para que você não precise se preocupar com a desinscrição. Aqui está o trecho simples: -
Nota: Remova a captura (1) se desejar usar os valores dos parâmetros no futuro.
fonte
agora é:
fonte
Espero que ajude alguém.
A pergunta acima afirma que o valor do parâmetro de consulta é necessário após o redirecionamento da página e podemos assumir que o valor do instantâneo (a alternativa não observável) seria suficiente.
Ninguém aqui mencionou snapshot.paramMap.get a partir da documentação oficial .
Portanto, antes de enviá-lo, adicione isso no componente de envio / redirecionamento:
em seguida, redirecione como (documentado aqui ):
ou simplesmente:
Verifique se você adicionou isso no seu módulo de roteamento, conforme documentado aqui :
E, finalmente, no seu componente que precisa usar o parâmetro de consulta
adicione importações (documentadas aqui ):
injetar ActivatedRoute
(a documentação também importa switchMap e também injeta Router e HeroService - mas são necessários apenas para alternativa observável - NÃO são necessários quando você usa a alternativa de instantâneo, como no nosso caso):
e obtenha o valor necessário (documentado aqui ):
OBSERVAÇÃO: SE VOCÊ ADICIONAR O MÓDULO DE ROTAÇÃO A UM MÓDULO DE RECURSO (MOSTRADO NA DOCUMENTAÇÃO) VERIFIQUE QUE EM APP.MODULE.ts ESTE MÓDULO DE ROTAÇÃO SEJA ANTES DO AppRoutingModule (ou outro arquivo com rotas de aplicativos no nível raiz) EM IMPORTAÇÕES: []. OUTRAS ROTAS DE RECURSOS NÃO SERÃO ENCONTRADAS (COMO VIRAM APÓS {path: '**', redirectTo: '/ not-found'} e você verá apenas a mensagem não encontrada).
fonte
Você só precisa injetar ActivatedRoute no construtor e acessar os parâmetros ou queryParams sobre ele
Em alguns casos, ele não fornece nada no NgOnInit ... talvez por causa da chamada init antes da inicialização dos parâmetros, nesse caso, você pode conseguir isso pedindo ao observável que aguarde algum tempo pela função debounceTime (1000)
por exemplo =>
debounceTime () Emite um valor da fonte observável somente após um período de tempo específico passado sem outra emissão de origem
fonte
Você não pode obter um parâmetro do RouterState se ele não estiver definido na rota; portanto, no seu exemplo, você deve analisar a string de consulta ...
Aqui está o código que eu usei:
fonte
Consulta e caminho (Angular 8)
Se você tiver um URL como https://myapp.com/owner/123/show?height=23 , use
ATUALIZAR
Caso você use
this.router.navigate([yourUrl]);
e seus parâmetros de consulta sejam incorporados emyourUrl
string, o angular codifica um URL e você obtém algo como este https://myapp.com/owner/123/show%3Fheight%323 - e a solução acima dará um resultado errado ( queryParams estará vazio e os parâmetros de consulta 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