Parâmetros de String de Consulta - Angular
Além dos parâmetros de rota, uma solicitação pode conter parâmetros na string de consulta. Por exemplo, na requisição http://localhost:4200/item?product=phone&price=200
product=phone&price=200
product
price
&
Os parâmetros da string de consulta não afetam a definição das rotas, e sua quantidade é arbitrária. Vamos usar o projeto do tema anterior como base para este exemplo:
helloapp/ ├── src/ │ ├── app/ │ │ ├── about.component.ts │ │ ├── app.component.ts │ │ ├── app.config.ts │ │ ├── item.component.ts │ │ ├── home.component.ts │ │ ├── not-found.component.ts │ ├── main.ts │ ├── index.html ├── angular.json ├── package-lock.json ├── package.json └── tsconfig.json
Neste projeto, o componente ItemComponent
import { Component } from "@angular/core";
import { ActivatedRoute, Params } from "@angular/router";
import { Observable } from "rxjs";
@Component({
selector: "item-info",
template: `<h2>Modelo {{id}}</h2>
<div>Produto: {{product}}</div>
<div>Preço: {{price}}</div>`
})
export class ItemComponent{
id: number | undefined;
product: string | undefined;
price: number | undefined;
constructor(private route: ActivatedRoute) {
// monitorando alterações no parâmetro id
route.params.subscribe(params => this.id = params["id"]);
// monitorando alterações nos parâmetros da string de consulta
route.queryParams.subscribe(
(queryParam: Observable<Params>) => {
this.product = queryParam["product"];
this.price = queryParam["price"];
}
);
}
}
Neste exemplo, as propriedades product
price
queryParams
ActivatedRoute
Observable<Params>
Agora, podemos passar dados para o ItemComponent através da string de consulta, como no exemplo: http://localhost:4200/item/5?product=phone&price=200
Em seguida, vamos modificar o código do AppComponent
import { Component } from "@angular/core";
import { RouterOutlet, RouterLink } from "@angular/router";
@Component({
selector: "my-app",
standalone: true,
imports: [RouterOutlet, RouterLink],
styles: `a { padding: 5px; }`,
template: `<div>
<nav>
<a routerLink="">Página Inicial</a>
<a routerLink="/about">Sobre</a>
<a routerLink="/item/5" [queryParams]="{ 'product': 'phone', 'price': 200 }">Item 5</a>
<a routerLink="/item/8" [queryParams]="{ 'product': 'tablet' }">Item 8</a>
</nav>
<router-outlet></router-outlet>
</div>`
})
export class AppComponent {}
Para passar os parâmetros no link, usamos a diretiva queryParams
