Vue.js es un framework progresivo de JavaScript utilizado para construir interfaces de usuario. A diferencia de otros frameworks monolíticos, Vue está diseñado desde el principio para ser adoptable de manera incremental. La biblioteca central se enfoca solo en la capa de vista, y es fácil de integrar con otras bibliotecas o proyectos existentes. Además, Vue es perfectamente capaz de impulsar aplicaciones sofisticadas de una sola página cuando se utiliza en combinación con herramientas modernas y bibliotecas de soporte.
- Introducción a Vue.js
¿Qué es Vue.js?
Vue.js es un framework de JavaScript que se utiliza para construir interfaces de usuario. Es conocido por su facilidad de uso, flexibilidad y rendimiento.
Características Clave de Vue.js
- Reactividad: Vue.js utiliza un sistema de reactividad que actualiza automáticamente la vista cuando los datos cambian.
- Componentes: Vue.js permite dividir la interfaz de usuario en componentes reutilizables.
- Directivas: Vue.js proporciona directivas como
v-bind
,v-model
,v-if
,v-for
, etc., para enlazar datos y manipular el DOM. - Transiciones y Animaciones: Vue.js incluye soporte integrado para transiciones y animaciones.
- Configuración del Entorno
Instalación de Vue.js
Puedes instalar Vue.js de varias maneras, pero una de las más comunes es a través de un CDN para proyectos pequeños o mediante Vue CLI para proyectos más grandes.
Usando CDN
<!DOCTYPE html> <html> <head> <title>Vue.js Example</title> <script src="https://cdn.jsdelivr.net/npm/vue@2"></script> </head> <body> <div id="app"> {{ message }} </div> <script> var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' } }); </script> </body> </html>
Usando Vue CLI
-
Instalar Vue CLI:
npm install -g @vue/cli
-
Crear un Nuevo Proyecto:
vue create my-project
-
Navegar al Directorio del Proyecto y Ejecutarlo:
cd my-project npm run serve
- Creación de un Proyecto Básico
Estructura de un Proyecto Vue.js
Un proyecto típico de Vue.js creado con Vue CLI tendrá la siguiente estructura de directorios:
my-project/ ├── node_modules/ ├── public/ │ ├── index.html ├── src/ │ ├── assets/ │ ├── components/ │ ├── App.vue │ ├── main.js ├── .gitignore ├── babel.config.js ├── package.json ├── README.md
Archivo main.js
El archivo main.js
es el punto de entrada de la aplicación Vue.js.
import Vue from 'vue' import App from './App.vue' Vue.config.productionTip = false new Vue({ render: h => h(App), }).$mount('#app')
Componente App.vue
El archivo App.vue
es el componente raíz de la aplicación.
<template> <div id="app"> <h1>{{ message }}</h1> </div> </template> <script> export default { data() { return { message: 'Hello Vue!' } } } </script> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; text-align: center; color: #2c3e50; margin-top: 60px; } </style>
- Componentes en Vue.js
Creación de Componentes
Los componentes son una de las características más poderosas de Vue.js. Permiten dividir la interfaz de usuario en piezas reutilizables y manejables.
Ejemplo de Componente
<!-- src/components/HelloWorld.vue --> <template> <div class="hello"> <h1>{{ msg }}</h1> </div> </template> <script> export default { name: 'HelloWorld', props: { msg: String } } </script> <style scoped> h1 { color: #42b983; } </style>
Uso de Componentes
Para usar un componente en otro componente, primero debes importarlo y luego registrarlo.
<!-- src/App.vue --> <template> <div id="app"> <HelloWorld msg="Welcome to Your Vue.js App"/> </div> </template> <script> import HelloWorld from './components/HelloWorld.vue' export default { name: 'App', components: { HelloWorld } } </script>
- Directivas en Vue.js
Directivas Comunes
- v-bind: Enlaza atributos de HTML a datos de Vue.
- v-model: Crea un enlace bidireccional entre un elemento de formulario y los datos.
- v-if: Renderiza elementos basados en una condición.
- v-for: Renderiza una lista de elementos usando un bucle.
Ejemplos de Directivas
<template> <div> <!-- v-bind --> <img v-bind:src="imageSrc" alt="Vue Logo"> <!-- v-model --> <input v-model="message" placeholder="Edit me"> <p>Message is: {{ message }}</p> <!-- v-if --> <p v-if="seen">Now you see me</p> <!-- v-for --> <ul> <li v-for="item in items" :key="item.id">{{ item.text }}</li> </ul> </div> </template> <script> export default { data() { return { imageSrc: 'https://vuejs.org/images/logo.png', message: '', seen: true, items: [ { id: 1, text: 'Item 1' }, { id: 2, text: 'Item 2' }, { id: 3, text: 'Item 3' } ] } } } </script>
- Ejercicio Práctico
Ejercicio
Crea una aplicación Vue.js que tenga un componente de lista de tareas. La aplicación debe permitir agregar nuevas tareas y marcar las tareas como completadas.
Requisitos
- Crea un componente
TaskList.vue
que muestre una lista de tareas. - Crea un componente
TaskItem.vue
que represente una tarea individual. - Usa
v-model
para enlazar un campo de entrada a una nueva tarea. - Usa
v-for
para iterar sobre las tareas y mostrarlas. - Usa
v-bind
para enlazar clases CSS basadas en el estado de la tarea (completada o no completada). - Usa
v-on
para manejar eventos de clic y marcar las tareas como completadas.
Solución
<!-- src/components/TaskItem.vue --> <template> <li :class="{ completed: task.completed }"> <input type="checkbox" v-model="task.completed"> {{ task.text }} </li> </template> <script> export default { name: 'TaskItem', props: { task: Object } } </script> <style scoped> .completed { text-decoration: line-through; } </style>
<!-- src/components/TaskList.vue --> <template> <div> <input v-model="newTask" @keyup.enter="addTask" placeholder="Add a task"> <ul> <TaskItem v-for="task in tasks" :key="task.id" :task="task"/> </ul> </div> </template> <script> import TaskItem from './TaskItem.vue' export default { name: 'TaskList', components: { TaskItem }, data() { return { newTask: '', tasks: [ { id: 1, text: 'Learn Vue.js', completed: false }, { id: 2, text: 'Build a project', completed: false } ] } }, methods: { addTask() { if (this.newTask.trim() !== '') { this.tasks.push({ id: this.tasks.length + 1, text: this.newTask, completed: false }); this.newTask = ''; } } } } </script>
<!-- src/App.vue --> <template> <div id="app"> <TaskList /> </div> </template> <script> import TaskList from './components/TaskList.vue' export default { name: 'App', components: { TaskList } } </script>
Conclusión
En esta sección, hemos cubierto los conceptos básicos de Vue.js, incluyendo la configuración del entorno, la creación de componentes, y el uso de directivas. También hemos realizado un ejercicio práctico para consolidar estos conceptos. En el siguiente módulo, profundizaremos en temas más avanzados de Vue.js y cómo integrarlo con otras herramientas y librerías.
JavaScript: De Principiante a Avanzado
Módulo 1: Introducción a JavaScript
- ¿Qué es JavaScript?
- Configuración de tu Entorno de Desarrollo
- Tu Primer Programa en JavaScript
- Sintaxis y Conceptos Básicos de JavaScript
- Variables y Tipos de Datos
- Operadores Básicos
Módulo 2: Estructuras de Control
- Sentencias Condicionales
- Bucles: for, while, do-while
- Sentencias Switch
- Manejo de Errores con try-catch
Módulo 3: Funciones
- Definición y Llamada de Funciones
- Expresiones de Función y Funciones Flecha
- Parámetros y Valores de Retorno
- Ámbito y Closures
- Funciones de Orden Superior
Módulo 4: Objetos y Arrays
- Introducción a los Objetos
- Métodos de Objeto y la Palabra Clave 'this'
- Arrays: Conceptos Básicos y Métodos
- Iteración sobre Arrays
- Desestructuración de Arrays
Módulo 5: Objetos y Funciones Avanzadas
- Prototipos y Herencia
- Clases y Programación Orientada a Objetos
- Módulos e Importación/Exportación
- JavaScript Asíncrono: Callbacks
- Promesas y Async/Await
Módulo 6: El Modelo de Objetos del Documento (DOM)
- Introducción al DOM
- Selección y Manipulación de Elementos del DOM
- Manejo de Eventos
- Creación y Eliminación de Elementos del DOM
- Manejo y Validación de Formularios
Módulo 7: APIs del Navegador y Temas Avanzados
- Almacenamiento Local y de Sesión
- Fetch API y AJAX
- WebSockets
- Service Workers y Aplicaciones Web Progresivas (PWAs)
- Introducción a WebAssembly
Módulo 8: Pruebas y Depuración
- Depuración de JavaScript
- Pruebas Unitarias con Jest
- Pruebas de Integración
- Pruebas de Extremo a Extremo con Cypress
Módulo 9: Rendimiento y Optimización
- Optimización del Rendimiento de JavaScript
- Gestión de Memoria
- Manipulación Eficiente del DOM
- Carga Perezosa y División de Código
Módulo 10: Frameworks y Librerías de JavaScript
- Introducción a React
- Gestión de Estado con Redux
- Conceptos Básicos de Vue.js
- Conceptos Básicos de Angular
- Elegir el Framework Adecuado