Tutorial

Como usar parâmetros de consulta em Angular

Published on November 16, 2020
authorauthor

Alligator.io and Bradley Kouchi

Português
Como usar parâmetros de consulta em Angular

Introdução

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.

Usando parâmetros de consulta com 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.

Preservando ou mesclando parâmetros de consulta com 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.

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.

Acessando valores de parâmetros de consulta

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:

Output
popular

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.

Conclusão

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.

Learn more about us


About the authors
Default avatar
Alligator.io

author



Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


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!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel