Agregando gastos
¡Genial! Ya aprendimos sobre Interpolation y cómo mostrar datos en nuestra aplicación. Ahora vamos a dar el siguiente paso: crear una función que nos permita guardar nuestros gastos de manera interactiva.
Paso #1: Creando nuestra lista de gastos
Primero, necesitamos un lugar donde guardar nuestros gastos. Para esto, en el archivo main.ts
, vamos a crear un nuevo signal llamado gastos
que será una lista donde guardaremos todos nuestros gastos:
export class App {
nombreGasto = signal('chocolate');
cantidadGasto = signal(10);
gastos = signal([]); // Esta será nuestra lista de gastos
}
¿Te fijaste en algo especial? La variable gastos
se crea de una forma un poco diferente:
gastos = signal([]);
Los corchetes []
indican que estamos creando una lista (también llamada Array). Una lista es como una caja donde podemos guardar muchos valores. Cuando queramos agregar un nuevo gasto a esta lista, usaremos este código:
gastos.update((values) => [...values, gasto]);
No te preocupes si esta sintaxis te parece un poco extraña al principio. Lo que hace es tomar todos los gastos que ya teníamos (representados por ...values
) y agregar uno nuevo al final (gasto
).
Paso #2: Creando una estructura para nuestros gastos
Para mantener nuestro código organizado, vamos a crear una Class
que nos ayudará a manejar cada gasto de manera ordenada.
¿Qué es una clase? 🤔 Piensa en ella como un molde o una receta. Así como una receta de galletas te dice qué ingredientes necesitas, una clase nos dice qué información necesitamos para crear un gasto.
Vamos a crear un nuevo archivo llamado gasto.ts
dentro de la carpeta src
con el siguiente código:
export class Gasto {
nombre: string;
cantidad: number;
constructor(nombreGasto: string, cantidadGasto: number) {
this.nombre = nombreGasto;
this.cantidad = cantidadGasto;
}
}
Esta clase es como nuestro formulario para crear gastos. Cada vez que queramos crear un nuevo gasto, necesitaremos dos cosas:
- Un nombre (que será un texto)
- Una cantidad (que será un número)
Tu estructura de archivos debería verse así:
Paso #3: Creando la función para agregar gastos
Ahora vamos a crear una función que nos ayude a guardar cada gasto. Una función es como una receta que le dice a la computadora qué pasos debe seguir para realizar una tarea.
En el archivo main.ts
, vamos a agregar nuestra función agregarGasto
:
export class App {
nombreGasto = signal('chocolate');
cantidadGasto = signal(10);
gastos = signal<Gasto[]>([]);
agregarGasto(): void {
const gasto = new Gasto(this.nombreGasto(), this.cantidadGasto());
this.gastos.update((values) => [...values, gasto]);
console.log(this.gastos());
}
}
¡Importante! 📝 No olvides agregar esta línea al inicio del archivo para poder usar nuestra clase Gasto:
import { Gasto } from './gasto';
Paso #4: Conectando nuestra función con la interfaz
Ahora necesitamos una forma de llamar a nuestra función cuando el usuario quiera agregar un gasto. En Angular, podemos hacer esto de varias formas:
- Cuando el usuario presione Enter en un campo
- Cuando haga clic en un botón
Vamos a actualizar nuestro HTML para agregar estas funcionalidades:
<div>
<label for="nombre-gasto">Nombre:</label>
<input
id="nombre-gasto"
type="text"
[(ngModel)]="nombreGasto"
(keyup.enter)="agregarGasto()"
/>
</div>
<div>
<label for="cantidad-gasto">Cantidad:</label>
<input
id="cantidad-gasto"
type="number"
[(ngModel)]="cantidadGasto"
(keyup.enter)="agregarGasto()"
/>
</div>
<button (click)="agregarGasto()">Agregar Gasto</button>
Cuando escribimos (keyup.enter)="agregarGasto()"
, le estamos diciendo a Angular: “Cuando el usuario presione la tecla Enter, ejecuta la función agregarGasto”.
De manera similar, (click)="agregarGasto()"
significa: “Cuando el usuario haga clic en el botón, ejecuta la función agregarGasto”.
El resultado se verá así:
Paso #5: Mejorando la experiencia del usuario
Para hacer nuestra aplicación más fácil de usar, vamos a limpiar los campos después de agregar un gasto. Esto permitirá al usuario agregar un nuevo gasto más rápidamente.
Actualizamos nuestra función agregarGasto
así:
agregarGasto(): void {
const gasto = new Gasto(this.nombreGasto(), this.cantidadGasto());
this.gastos.update(values => [...values, gasto]);
console.log(this.gastos());
this.nombreGasto.set('');
this.cantidadGasto.set(0);
}
¡Y listo! 🎉 Ahora tienes una aplicación que puede guardar gastos de manera interactiva. En el siguiente paso, aprenderemos cómo mostrar todos estos gastos en pantalla.
Paso #6: Mostrar el resultado en consola
Para verificar que nuestro código está funcionando, tenemos la siguiente linea de código:
console.log(this.gastos());
Esta linea de código nos permite imprimir el resultado de la lista de gastos en la consola del navegador.