Parâmetros de consulta em Angular permitem passar parâmetros opcionais em qualquer rota na aplicação. Parâmetros de consulta são diferentes dos parâmetros regulares de rota, que só estão disponíveis em uma rota e não são opcionais (por exemplo, /product/:id
).
Neste artigo, vamos fazer referência a um exemplo de uma aplicação que exibe uma lista de produtos. Vamos fornecer valores opcionais de order
e price-range
sobre o qual o componente que recebe pode ler e atuar. Os valores fornecidos afetarão a ordenação e a filtragem da lista de produtos.
Router.navigate
Se você estiver navegando até a rota usando imperativamente Router.navigate
, você irá passar parâmetros de consulta com queryParams
.
Em nosso exemplo, se quisermos encaminhar os visitantes para os produtos com a lista ordenada por popularidade, isto seria algo assim:
goProducts() {
this.router.navigate(['/products'], { queryParams: { order: 'popular' } });
}
Isso resultará em uma URL como esta:
http://localhost:4200/products?order=popular
Também é possível fornecer vários parâmetros de consulta. Em nosso exemplo, se quisermos encaminhar os visitantes para os produtos com a lista ordenada por popularidade e filtrada com uma faixa de preços cara, isso seria assim:
goProducts() {
this.router.navigate(['/products'], { queryParams: { order: 'popular', 'price-range': 'not-cheap' } });
}
Isso resultará em uma URL como esta:
http://localhost:4200/products?order=popular&price-range=not-cheap
Agora, você tem uma compreensão de como queryParams
pode ser usado para definir parâmetros de consulta.
queryParamsHandling
Por padrão, os parâmetros de consulta são perdidos em qualquer ação de navegação subsequente. Para evitar isso, é possível definir queryParamsHandling
como 'preserve'
ou 'merge'
.
Em nosso exemplo, se quisermos encaminhar os visitantes de uma página com o parâmetro de consulta { order: 'popular' }
para a página /users
mantendo os parâmetros de consulta, usaríamos 'preserve'
:
goUsers() {
this.router.navigate(['/users'], { queryParamsHandling: 'preserve' });
}
Isso resultará em uma URL como esta:
http://localhost:4200/users?order=popular
Em nosso exemplo, se quisermos encaminhar os visitantes de uma página com o parâmetro de consulta { order: 'popular' }
para a página /users
enquanto passamos os parâmetros de consulta { filter: 'new' }
, usaríamos 'merge'
:
goUsers() {
this.router.navigate(['/users'], { queryParams: { filter: 'new' }, queryParamsHandling: 'merge' });
}
Isso resultará em uma URL como esta:
http://localhost:4200/users?order=popular&filter=new
Nota: a preservação dos parâmetros de consulta costumava ser feita com preserveQueryParams
definido como true
, mas isso agora está obsoleto em Angular 4+ em favor de queryParamsHandling
.
Agora, você tem uma compreensão de como queryParamsHandling
pode ser usado para preservar e mesclar parâmetros de consulta.
RouterLink
Em nosso exemplo, se em vez disso você estiver usando a diretiva RouterLink
para navegar até a rota, você usaria queryParams
dessa forma:
<a [routerLink]="['/products']" [queryParams]="{ order: 'popular'}">
Products
</a>
E, em nosso exemplo, se você quiser 'preservar'
ou 'mesclar'
parâmetros de consulta na navegação subsequente, você usaria queryParamsHandling
desta forma:
<a [routerLink]="['/users']"
[queryParams]="{ filter: 'new' }"
queryParamsHandling="merge">
Users
</a>
Agora, você entende como queryParams
e queryParamsHandling
podem ser usados com RouterLink
.
Agora que sabemos como passar parâmetros de consulta opcionais para uma rota, vamos ver como acessar esses valores nas rotas resultantes. A classe ActivatedRoute
possui uma propriedade queryParams
que retorna um observável dos parâmetros de consulta disponíveis na URL atual.
Dada a seguinte URL de rota:
http://localhost:4200/products?order=popular
Podemos acessar o parâmetro de consulta order
desta forma:
// ...
import { ActivatedRoute } from '@angular/router';
import 'rxjs/add/operator/filter';
@Component({ ... })
export class ProductComponent implements OnInit {
order: string;
constructor(private route: ActivatedRoute) { }
ngOnInit() {
this.route.queryParams
.filter(params => params.order)
.subscribe(params => {
console.log(params); // { order: "popular" }
this.order = params.order;
console.log(this.order); // popular
}
);
}
}
No log de console veríamos o objeto params
:
Output{ order: "popular" }
E o valor params.order
:
Outputpopular
Também há queryParamMap
, que retorna um observável com um objeto paramMap
.
Dada a seguinte URL de rota:
http://localhost:4200/products?order=popular&filter=new
Podemos acessar os parâmetros de consulta desta forma:
this.route.queryParamMap
.subscribe((params) => {
this.orderObj = { ...params.keys, ...params };
}
);
Utilizamos o operador de propagação de objetos aqui e essa é a forma resultante dos dados em orderObj
:
{
"0": "order",
"1": "filter",
"params": {
"order": "popular",
"filter": "new"
}
}
Agora, você tem uma compreensão de como queryParams
e queryParamMap
podem ser usados para acessar valores nas rotas resultantes.
Neste artigo, você usou diferentes exemplos para definir e obter parâmetros de consulta em Angular. Apresentamos queryParams
e queryParamsHandling
com Router.navigate
e RouterLink
. Também apresentamos queryParams
e queryParamMap
com ActivatedRoute
.
Se você gostaria de aprender mais sobre o Angular, confira nossa página de tópico sobre Angular para exercícios e projetos de programação.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!