ANG_FRONT

Capítulo 8.5. Query Params en Angular


https://example.com/products?category=electronics&sort=price

const routes: Routes = [
  { path: 'products', component: ProductsComponent },
];

import { Component } from '@angular/core';
import { Router } from '@angular/router';

@Component({
  selector: 'app-product-list',
  template: `
    <button (click)="goToProducts('electronics', 'price')">Ver Productos Electrónicos</button>
  `
})
export class ProductListComponent {
  constructor(private router: Router) {}

  goToProducts(category: string, sort: string) {
    this.router.navigate(['/products'], { queryParams: { category, sort } });
  }
}

import { Component, OnInit } from ‘@angular/core’; import { ActivatedRoute } from ‘@angular/router’;

@Component({ selector: ‘app-products’, template: ` <h1>Productos</h1> <p>Categoría: </p> <p>Ordenar por: content<h1 id="capítulo-84-navegación-con-el-objeto-router-en-angular">Capítulo 8.4. Navegación con el objeto Router en Angular</h1>

Objetivo de la práctica

Duración aproximada

Instrucciones


import { Component } from '@angular/core';
import { Router } from '@angular/router';

@Component({
  selector: 'app-example',
  templateUrl: './example.component.html'
})
export class ExampleComponent {
  constructor(private router: Router) {}
}

goToAbout() { this.router.navigate([‘/about’]); }


- *Navegación con Parámetros*

- Si necesitas navegar a una ruta que incluye parámetros, puedes pasarlos como un array:

```typescript

goToUserDetail(userId: number) {
  this.router.navigate(['/user', userId]);
}

goToProducts(category: string) {
  this.router.navigate(['/products'], { queryParams: { category } });
}

if (isAuthenticated) {
  this.router.navigate(['/dashboard']);
} else {
  this.router.navigate(['/login']);
}

import { Location } from '@angular/common';

constructor(private location: Location) {}

goBack() {
  this.location.back();
}

import { Injectable } from '@angular/core';
import { Router } from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class AuthService {
  constructor(private router: Router) {}

  login() {
    // Lógica de autenticación
    this.router.navigate(['/dashboard']);
  }

  logout() {
    this.router.navigate(['/login']);
  }
}

highlighter_prefix highlighter_suffix jekyllJekyll::Drops::JekyllDroplayout{“layout”=>”default”}page{“permalink”=>”/Capítulo8/Capitulo8.5/”, “layout”=>”page”, “title”=>”Capítulo 8.5. Query Params en Angular”, “content”=>”# Capítulo 8.5. Query Params en Angular\n\n- ¿Qué son los Query Params?\n- Los query params son parte de la URL que se utilizan para enviar datos a un servidor o para definir el estado de la aplicación. Se presentan en la URL después del signo de interrogación (?). Por ejemplo:\n\nbash\n\nhttps://example.com/products?category=electronics&sort=price\n\n\n- En este caso, category y sort son query params.\n\n- Configuración de Rutas\n\n- No necesitas definir explícitamente los query params en la configuración de rutas. Angular permite que cualquier ruta acepte query params sin necesidad de especificarlos.\n\n- Ejemplo de Ruta\n\ntypescript\n\nconst routes: Routes = [\n { path: 'products', component: ProductsComponent },\n];\n\n\n- Navegación con Query Params\n\n- Puedes navegar a una ruta con query params utilizando el método navigate() del objeto Router.\n\n- Ejemplo de navegación:\n\ntypescript\n\nimport { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-product-list',\n template: `\n <button (click)=\"goToProducts('electronics', 'price')\">Ver Productos Electrónicos</button>\n `\n})\nexport class ProductListComponent {\n constructor(private router: Router) {}\n\n goToProducts(category: string, sort: string) {\n this.router.navigate(['/products'], { queryParams: { category, sort } });\n }\n}\n\n\n- Acceso a Query Params\n- Para acceder a los query params en un componente, puedes usar el servicio ActivatedRoute. Este servicio permite obtener los parámetros de la URL en el componente donde se ha activado la ruta.\n\n- Ejemplo de acceso\ntypescript\n\nimport { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-products',\n template: `\n <h1>Productos</h1>\n <p>Categoría: {{ category }}</p>\n <p>Ordenar por: {{ sort }}</p>\n `\n})\nexport class ProductsComponent implements OnInit {\n category!: string;\n sort!: string;\n\n constructor(private route: ActivatedRoute) {}\n\n ngOnInit() {\n this.route.queryParams.subscribe(params => {\n this.category = params['category'];\n this.sort = params['sort'];\n });\n }\n}\n\n\n\n- Actualización de Query Params\n\n- Si deseas actualizar los query params sin recargar el componente, utilizar el método navigate del Router con un objeto queryParams que contenga los nuevos valores.\n\n- Ejemplo de actualización:\n\ntypescript\n\nupdateCategory(newCategory: string) {\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { category: newCategory },\n queryParamsHandling: 'merge', // Mantiene los otros query params\n });\n}\n\n\n- Eliminación de Query Params\n\n- Para eliminar un query param específico, simplemente se debe establecer su valor en null o undefined en el objeto queryParams.\n\n- Ejemplo de eliminación:\n\ntypescript\n\nremoveSortParam() {\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { sort: null }, // Eliminará el query param 'sort'\n queryParamsHandling: 'merge', // Mantiene otros parámetros\n });\n}\n\n\n”, “dir”=>”/Capítulo8/Capitulo8.5/”, “name”=>”Readme.md”, “path”=>”Capítulo8/Capitulo8.5/Readme.md”, “url”=>”/Capítulo8/Capitulo8.5/”}paginatorsiteJekyll::Drops::SiteDrop</p> ` }) export class ProductsComponent implements OnInit { category!: string; sort!: string;

constructor(private route: ActivatedRoute) {}

ngOnInit() { this.route.queryParams.subscribe(params => { this.category = params[‘category’]; this.sort = params[‘sort’]; }); } }


- *Actualización de Query Params*

- Si deseas actualizar los query params sin recargar el componente, utilizar el método navigate del Router con un objeto queryParams que contenga los nuevos valores.

- Ejemplo de actualización:

```typescript

updateCategory(newCategory: string) {
  this.router.navigate([], {
    relativeTo: this.route,
    queryParams: { category: newCategory },
    queryParamsHandling: 'merge', // Mantiene los otros query params
  });
}

removeSortParam() {
  this.router.navigate([], {
    relativeTo: this.route,
    queryParams: { sort: null }, // Eliminará el query param 'sort'
    queryParamsHandling: 'merge', // Mantiene otros parámetros
  });
}