- Angular es un framework de desarrollo frontend desarrollado por Google.
- Orientado a la construcción de aplicaciones SPA (Single Page Applications).
- Basado en TypeScript: Mejora la productividad del desarrollo con tipado estático.
- Arquitectura modular: Facilita la escalabilidad y el mantenimiento.
- Soporte para componentes y directivas: Divide la UI en piezas reutilizables.
- Integración de herramientas: Como RxJS para manejo reactivo y Angular CLI para automatización.
El sistema de routing permite manejar las rutas de una SPA, cargando vistas dinámicamente sin recargar toda la página.
-
Crea el módulo de rutas:
ng generate module app-routing --flat --module=app
-
Configura rutas en
app-routing.module.ts
:import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { HomeComponent } from './home/home.component'; import { AboutComponent } from './about/about.component'; const routes: Routes = [ { path: '', component: HomeComponent }, { path: 'about', component: AboutComponent }, { path: '**', redirectTo: '' }, ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule], }) export class AppRoutingModule {}
-
Usa
<router-outlet>
enapp.component.html
:<nav> <a routerLink="/">Home</a> <a routerLink="/about">About</a> </nav> <router-outlet></router-outlet>
- Crea un módulo con lazy loading:
ng generate module features/dashboard --route=dashboard --module=app
- Esto genera automáticamente el código necesario para cargar el módulo bajo demanda.
import { ActivatedRoute } from '@angular/router';
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-item-detail',
template: `<p>Item ID: {{ itemId }}</p>`
})
export class ItemDetailComponent implements OnInit {
itemId!: string;
constructor(private route: ActivatedRoute) {}
ngOnInit(): void {
this.itemId = this.route.snapshot.paramMap.get('id') || '';
}
}
Un componente es una unidad básica de Angular:
@Component({
selector: 'app-example',
template: `<h1>{{ title }}</h1>`
})
export class ExampleComponent {
title = 'Hello Angular';
}
Los módulos agrupan componentes:
@NgModule({
declarations: [ExampleComponent],
imports: [],
bootstrap: [ExampleComponent],
})
export class AppModule {}
- Estructurales:
<div *ngIf="isVisible">Visible</div>
- De Atributos:
<button [disabled]="!isEnabled">Click</button>
- Interpolación:
<p>{{ title }}</p>
- Property Binding:
<img [src]="imageUrl" />
- Event Binding:
<button (click)="handleClick()">Click me</button>
- Two-Way Binding:
<input [(ngModel)]="username" />
ngOnInit
para inicialización:ngOnInit() { console.log('Component initialized'); }
Signals son un nuevo mecanismo para manejar el estado reactivo en Angular, introducido en Angular 16.
- Configuración básica:
import { Component, signal, computed, effect } from '@angular/core'; @Component({ selector: 'app-signals-demo', template: ` <p>Count: {{ count() }}</p> <p>Double Count: {{ doubleCount() }}</p> <button (click)="increment()">Increment</button> `, }) export class SignalsDemoComponent { count = signal(0); doubleCount = computed(() => this.count() * 2); constructor() { effect(() => console.log('Count changed:', this.count())); } increment() { this.count.update((current) => current + 1); } }
- Resultado:
- Muestra el conteo actual y su valor duplicado.
- Actualiza dinámicamente el estado al hacer clic en el botón.