Permite navegar entre paginas, en resumen son componentes, porque todo es compilado a uno final.
En versiones anteriores se debe configurar manualmente el routing en app.routing generando un modulo.
ng g module app-routing
- Importamos Routes, y RouterModule desd e Angular/router
- Definimos las rutas
Agregamos las rutas configurando Routes ,y agregar<router-outlet> en el index (app.comoponent. usamos la sintaxis :ID si queremos pasar parámetros después del /, al igual que en express
import Router from @angular/Router
private router: Router
export const routes: Routes = [
{
path: '',
component: HomeComponentComponent,
},
{
path: 'test',
component: TestingComponent,
},
];
Si queremos movernos a una vista distinta usamos algo parecido a
agregar() {
this.router.navigate(['endpoint' ])
}
(ngSubmit)="f.form.valid && method()" // podemos usar esto en el html para validar un formulario, el formulario debe tener la referencia local #f ="ngForm"
Pasar parámetros¶
dentro de un <a> o algún elemento, usamos un routerLink, tambien puede usarse como property binding [routerlink]="['endpoint', parameters]
La clase que vaya a recibir el parámetro, debe implementar el servicio de Route
export class ... implements onInit {
attrLink: any;
constructor(... private route: ActivatedRoute) {
}
...
ngOnInit() {
this.attrLink = this.route.snapshot.params['PARAM_ID'];
... code
}
agregar() {
this.router.navigate(['endpoint' ])
}
}
Query PARAMS¶
Si queremos mandar un componente, no como un parámetro, en el sentido /:id en el Router, sino como si fuera la sintaxis, endpoint?param=... lo que debemos hacer es agregarqueryParameteres
IMPORTAR ROUTERMODULE en el TS
...
<a
[routerLink]=['endpoint', paramVariable] <!-- ID es el valor del /endpoint/:param -->
[queryParams]=[nombreQueryParam:'valor']
>
...
</a>
y lo recuperamos en el TS de la siguiente manera
export class ... implements onInit {
attrLink: any;
constructor(... private route: ActivatedRoute) {
}
...
ngOnInit() {
this.attrLink = this.route.snapshot.params['PARAM_ID'];
this.paramAttr = this.route.snapshot.queryParams['nombreQueryParam']
... code
}
agregar() {
this.router.navigate(['endpoint' ])
}
}
y ya a posteriori generamos valores, lo casteamos...
Child Routes¶
Simplemente modificamos las rutas y agregamos el paraemtro children: {}
ANTES
export const routes: Routes = [
{
path: '',
component: HomeComponentComponent,
},
{
path: 'test',
component: TestingComponent,
},
];
DESPUES
export const routes: Routes = [
{
path: '',
component: HomeComponentComponent,
children: {
{path: '...', component: COMPONENT}
{path: "...", component: COMPONENT}
}
},
{
path: 'test',
component: TestingComponent,
},
];
pero en el router outlet debemos decidir en donde mostrar la información del hijo.
Así que debemos agregar nuevamente <router-outlet> en la vista que pertenezca al nuevo "padre" relativo
Si queremos ocultar el contenido del padre relativo, podemos hacer algo como esto.
import { Component } from '@angular/core';
import { Router, NavigationEnd } from '@angular/router';
@Component({
selector: 'app-relative',
templateUrl: './relative.component.html',
})
export class RelativeComponent {
showContent = true; // Flag to control the visibility of parent content
constructor(private router: Router) {
this.router.events.subscribe((event) => {
if (event instanceof NavigationEnd) {
// Check if the current URL contains the child route
this.showContent = !this.router.url.includes('ruta-hija'); // Ruta hija específica
}
});
}
}
COMPONENTE DE ERROR (404)¶
Si queremos generar un componente para cualquier ruta que no exista, simplemente debemos agregar ** como path en el vector de rutas.
PARA INJECATR EL DOCUMENTo
import { DOCUMENT } from '@angular/common';
import { Component, Inject } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'app-header',
standalone: true,
imports: [],
templateUrl: './header.component.html',
styleUrl: './header.component.css',
})
export class HeaderComponent {
constructor(
private router: Router,
@Inject(DOCUMENT) private document: Document
) {}
returnPage() {
let referer = this.document.referrer;
}
}