Galería de Productos Dinámica con Angular y TypeScript

Clase 63 de 71Curso de Angular: Creación de Aplicaciones Web

Resumen

¿Cómo se despliegan elementos adicionales en una galería de productos?

En el desarrollo de una galería de productos, es esencial no solo mostrar las imágenes, sino también ofrecer funcionalidades interactivas que enriquezcan la experiencia del usuario. A continuación, exploraremos cómo manejar elementos adicionales, como categorías y múltiples imágenes, utilizando Angular, una popular plataforma de desarrollo web.

¿Cómo se muestra una categoría como parte de un producto?

Para enriquecer la información presentada, es fundamental mostrar detalles adicionales, como la categoría del producto. Si un producto tiene una categoría definida como un objeto anidado, primero necesitaremos mapear estos detalles en nuestro modelo de datos.

Creación de un modelo para la categoría

Antes de mostrar los detalles de la categoría, es importante definir un modelo para ello. Este modelo contendrá los atributos id, name e image:

// category.model.ts
export interface Category {
    id: number;
    name: string;
    image: string;
}

Incorporación al modelo del producto

Luego, incluimos este modelo dentro del modelo del producto, especificando que un producto puede tener una categoría vinculada:

// product.model.ts
export interface Product {
    id: number;
    name: string;
    images: string[];
    category?: Category;
}

Visualización de la categoría en la interfaz

Finalmente, podemos utilizar el objeto mapeado para mostrar el nombre de la categoría en mayúsculas, empleando un pipe de Angular:

<!-- product.component.html -->
<div>{{ product.category?.name | uppercase }}</div>

¿Cómo se gestionan y muestran múltiples imágenes de un producto?

Es común que los productos tengan más de una imagen para mostrar distintos ángulos o características. Angular facilita la gestión de estas imágenes gracias a directivas como ngFor.

Implementación de ngFor para iterar imágenes

Empleamos ngFor para iterar sobre todas las imágenes del array y mostrarlas dinámicamente en la galería:

<div *ngFor="let image of product.images">
    <img [src]="image" (click)="changeCover(image)">
</div>

¿Cómo se configura la funcionalidad de reemplazo de imagen principal?

Al hacer clic en cualquier imagen de la galería, deberíamos poder establecerla como la imagen principal del producto. Para esto, vamos a crear una señal (o signal) que almacene esta imagen de portada.

Declaración y gestión de la señal de imagen de portada

Primero, declaramos una señal para la imagen de portada en el componente del detalle del producto:

// product-detail.component.ts
cover: string = '';

ngOnInit() {
    if (product.images && product.images.length > 0) {
        this.cover = product.images[0];
    }
}

Función para cambiar la imagen de portada

Definimos una función que actualizará la imagen de portada al hacer clic en una imagen de la galería:

changeCover(newImage: string) {
    this.cover = newImage;
}

Implementación en el HTML

Aseguramos que la primera imagen mostrada sea la portada inicial y que las imágenes de la galería puedan cambiarla:

<img [src]="cover" alt="Portada del producto">
<div *ngFor="let image of product.images">
    <img [src]="image" (click)="changeCover(image)">
</div>

Con estos pasos, logramos una galería interactiva que no solo muestra múltiples imágenes de un producto, sino que también permite cambiar dinamicamente la imagen de portada con un simple clic. Esta funcionalidad mejora significativamente la experiencia del usuario en una tienda en línea. A medida que aprendes y exploras más sobre Angular, identifica áreas en las que puedes aplicar este tipo de funcionalidad para crear experiencias más interactivas e intuitivas. ¡No dejes de experimentar y descubrir nuevas posibilidades con Angular!