CodeForge

Maquetación Web Dinámica / Puentes a los frameworks

Puente a Angular 21: tu tarjeta con signals

Teoría20 min20 XP

Angular es la otra gran familia de frameworks: más estructurado, muy usado en empresas, y con una novedad que lo modernizó por completo —las SIGNALS—. Tomamos otra vez la tarjeta del módulo 14 y la vemos con la reactividad de Angular 21. Reconocerás la misma lógica de estado que ya dominas, con otra sintaxis y una idea elegante debajo.

La hoja de cálculo reactiva

Tu tarjeta del módulo 14, en Angular

tarjeta.component.ts
import { Component, signal, input } from "@angular/core";

@Component({
selector: "app-tarjeta",
standalone: true,
template: `
  <article class="tarjeta">
    <h3>{{ titulo() }}</h3>
    <button [class.activo]="activo()" (click)="alternar()">
      {{ activo() ? '♥ Te gusta' : '♡ Me gusta' }}
    </button>
  </article>
`,
})
export class TarjetaComponent {
titulo = input("Amanecer andino");      // input signal: la 'prop' del componente
activo = signal(false);                 // estado reactivo (la celda)
alternar() { this.activo.update((v) => !v); }   // cambiarla actualiza la vista
}

La lógica es idéntica a la del módulo 14 y a la de React: un booleano activo que se alterna. La signal activo se LEE llamándola como función (activo()) y se CAMBIA con .set() o .update(). Al cambiarla, la plantilla que la usa se redibuja sola — sin classList.toggle ni textContent.

El binding de plantilla: tres símbolos

Angular conecta la clase con el HTML mediante tres tipos de binding que reconocerás enseguida:

binding.html
<!-- INTERPOLACIÓN {{ }}: mostrar un valor -->
<h3>{{ titulo() }}</h3>

<!-- [propiedad]: enlazar una propiedad/atributo al estado -->
<button [class.activo]="activo()" [disabled]="cargando()">...</button>

<!-- (evento): reaccionar a un evento del DOM -->
<button (click)="alternar()">Me gusta</button>

Es el mismo trío de siempre —mostrar datos, cambiar clases/atributos según estado, reaccionar a clics— que en el módulo 14 hacías con textContent, classList y addEventListener. Angular lo declara EN la plantilla: {{ }} para mostrar, [ ] para enlazar hacia el DOM, ( ) para escuchar del DOM. Y su control de flujo moderno (@if, @for) reemplaza los bucles de render manual del módulo 14.

En Angular, tienes activo = signal(false) y en la plantilla [class.activo]='activo()'. Llamas activo.set(true). ¿Qué pasa con la clase del botón?

Mini-reto

Traza el paralelo completo de tu tarjeta en las tres formas que ya viste: en vanilla (módulo 14) alternabas con classList.toggle; en React con useState + className; en Angular con signal + [class.activo]. Escribe las tres versiones del MISMO botón lado a lado. Ver que es la misma idea —estado que gobierna la vista— con tres sintaxis desmitifica todos los frameworks a la vez.

Qué sigue

Recorriste los frameworks de JavaScript. El último puente es distinto: no es un framework de componentes, sino de ESTILOS —Tailwind—, y conecta directo con lo que construiste en el módulo 17. Verás tus tokens convertirse en la configuración de Tailwind v4, cerrando el círculo del curso.

Puente a Angular 21Angular 21 de Cero a ExpertoContinúa este mismo componente en el siguiente supercurso.