Métodos Vue: validar descuentos y carrito
Clase 22 de 37 • Curso de Reactividad con Vue.js 3
Contenido del curso
Reactividad a profundidad
- 6

Paradigma reactivo: responsivo, resiliente y escalable
03:49 min - 7

Proxies: la clave de la reactividad Vue
06:29 min - 8

Creando tu primer mini framework reactivo
07:04 min - 9

Integrar Proxy para crear mini framework reactivo
06:06 min - 10

Refleja tu lógica mantenible con JavaScript
09:29 min - 11

Conceptos clave de reactividad: efectos, track y trigger
03:53 min - 12

Efectos trackers triggers: cómo Vue vincula datos
07:39 min
Templates de Vue.js
- 13
Templates de HTML en Vue.js: Mejores Prácticas Esenciales
00:21 min - 14

Estructura inicial de Platzy Commerce con Vue
06:52 min - 15

Expresiones JavaScript en templates Vue
06:49 min - 16

v-bind y clase reactiva en Vue.js
06:08 min - 17

v-show vs v-if en Vue: cuándo usar cada uno
08:53 min - 18

Directiva v-for para listas en Vue.js
08:14 min - 19

Eventos con v-on en templates de Vue
06:49 min
APIs internas de Vue.js
Segunda capa: componentes de Vue.js
- 25

Crear componentes reutilizables con Vue
06:56 min - 26

Cómo pasar datos de padre a hijo en Vue
14:13 min - 27
Creación de Componentes Personalizados en Aplicaciones Web
00:37 min - 28

Eventos personalizados en Vue: comunicar hijo a padre
04:27 min - 29

Eventos personalizados con Composition API
03:57 min - 30

Watchers en Vue Options API
08:53 min - 31

Watchers en Vue Composition API
08:19 min - 32

Computed properties vs watchers en Vue
05:17 min - 33

Computed en Vue Composition API
06:20 min - 34

Ciclos de vida en Vue: cuándo y cómo cargar datos
08:19 min - 35

Ciclos de vida en Composition API
06:03 min
Siguientes pasos
Aprende a crear funcionalidad personalizada en Vue con la Options API: desde métodos para validar códigos de descuento hasta un carrito que gestiona stock y cantidades de forma reactiva. Verás cómo usar this para acceder al contexto, capturar eventos con $event y organizar mejor el código en methods.
¿Cómo crear y usar methods en Vue Options API?
Crear métodos en la Options API permite encapsular lógica y llamar funciones desde el template. Igual que con data, se define la opción methods para centralizar acciones como aplicar descuentos o responder a eventos de teclado.
- Define
methodspara agrupar funciones reutilizables. - Usa this para acceder a
data, otros methods y estado reactivo. - Llama métodos desde el template al presionar Enter u otros eventos.
- Mantén el código claro: un método por responsabilidad.
¿Cómo luce la definición básica de methods?
export default {
data() {
return {
// estado reactivo: producto, carrito, etc.
};
},
methods: {
applyDiscounts() {
// aplicar el mismo descuento para comprobar el flujo.
// aquí solo se valida que todo funciona.
},
},
};
¿Cómo llamarlo desde el template con Enter?
<!-- Al presionar Enter en el input, ejecuta el método. -->
<input type="text" @keyup.enter="applyDiscounts" placeholder="Código de descuento" />
¿Cómo validar códigos de descuento con $event y arrays?
Para una validación real, define un arreglo de discount codes en data y captura el valor del input con $event. Con event.target.value obtienes el texto y con findIndex decides si el código existe. Si existe, aplicas el descuento y eliminas el código para evitar usos múltiples.
- Define
discountCodescomo arreglo de cadenas. - Usa $event para recibir el objeto del evento.
- Emplea
event.target.valuepara leer el input. - Valida con
findIndexy elimina consplicesi ya se usó.
¿Cómo capturar el valor del input y validar?
export default {
data() {
return {
discountCodes: ["Plati", "Plati veinte", "Diego Samuel"],
};
},
methods: {
applyDiscounts(event) {
const input = event.target.value;
const index = this.discountCodes.findIndex(code => code === input);
if (index >= 0) {
// aplicar el descuento solo si el código existe.
// ... lógica de descuento ...
// eliminar el código para impedir usos repetidos.
this.discountCodes.splice(index, 1);
}
},
},
};
<!-- Pasa el evento completo al método con $event. -->
<input type="text" @keyup.enter="applyDiscounts($event)" />
¿Cómo agregar al carrito y manejar stock y quantity reactivamente?
Crea un método addToCart que añada el producto actual al arreglo carrito. Evita duplicados con findIndex: si ya existe, incrementa quantity; si no, haz push con quantity: 1. Actualiza el stock con -=. Gracias a la reactividad de Vue (vía proxy), los cambios se reflejan en todas las vistas donde se usa el estado.
- Usa
pushpara insertar nuevos elementos en el carrito. - Evita duplicados comparando por
product.nameconfindIndex. - Maneja
quantitypara sumar unidades del mismo producto. - Disminuye
stocksiempre que agregas al carrito. - Muestra
quantityen el template y el contador concart.length.
¿Cómo implementar addToCart con control de duplicados?
export default {
data() {
return {
product: { name: "Producto X", stock: 10 },
cart: [],
};
},
methods: {
addToCart() {
const index = this.cart.findIndex(p => p.name === this.product.name);
if (index >= 0) {
this.cart[index].quantity += 1;
} else {
this.cart.push({ ...this.product, quantity: 1 });
}
this.product.stock -= 1;
},
},
};
¿Cómo vincular el botón y mostrar cantidades en el template?
<!-- Evento de clic para agregar al carrito. -->
<button @click="addToCart">Agregar al carrito</button>
<!-- Mostrar cada ítem con su quantity. -->
<li v-for="p in cart" :key="p.name">
{{ p.name }} ({{ p.quantity }})
</li>
<!-- Contador de elementos en el carrito. -->
<span>{{ cart.length }}</span>
Conceptos clave explicados: methods, this y contexto reactivo; manejo de eventos con $event; acceso a event.target.value; operaciones de arreglo con findIndex, push y splice; control de stock y quantity; efecto de la reactividad tipo proxy; integración en el template con eventos de Enter y click. A continuación, se propone replicar esta lógica con la Composition API.
¿Tienes dudas o quieres compartir cómo gestionas descuentos y carrito en Vue? Cuéntalo en los comentarios.