Curso de Vue JS - Tutorial en Español 😍 [Desde Cero] (Parte I)
Curso de Vue JS - Tutorial en Español 😍 [Desde Cero]
Curso de Vue.js 😍 #01 Introducción [Tutorial en Español desde cero] Framework de Javascript
Apuntes:
- Página oficial de documentación de Vue.js.
- Script para trabajar con Vue.js.
- Desarrollo: <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>.
- Producción: <script src="https://cdn.jsdelivr.net/npm/vue"></script>.
- Creo un proyecto vacio en Visual Studio Code o cualquier editor de preferencia.
- Creo un archivo de extensión html (01.html) y otro de extensión js (01.js).
- El ponente recomienda instalar la extensión Live Server en Visual Studio Code.
- Contenido archivo 01.html:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Hola mundo con Vue.js</title>
</head>
<body>
<div id="app">
<h1>{{ titulo }}</h1>
<ul>
<li v-for="fruta of frutas">
{{fruta.cantidad}} - {{fruta.nombre}}
<span v-if="fruta.cantidad === 0"> - Sin stock</span>
</li>
</ul>
</div>
<!-- development version, includes helpful console warnings -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="01.js"></script>
</body>
</html>
- Contenido archivo 01.js:
const app = new Vue({
el: '#app',
data: {
titulo: 'Hola mundo con Vue',
frutas1: ['Manzana', 'Pera', 'Platano'],
frutas: [
{nombre: 'Pera', cantidad: 10},
{nombre: 'Manzana', cantidad: 0},
{nombre: 'Platano', cantidad: 11}
]
}
});
#02 Methods, v-model y Evento Click | Curso de Vue.js 😍 Desde Cero [Tutorial en Español]
Apuntes:
- Modificamos el archivo 01.html:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Hola mundo con Vue.js</title>
</head>
<body>
<div id="app">
<h1>{{ titulo }}</h1>
<input type="text" v-model="nuevaFruta">
<button @click="agregarFruta">Agregar</button>
<ul>
<li v-for="fruta of frutas">
{{fruta.cantidad}} - {{fruta.nombre}}
<span v-if="fruta.cantidad === 0"> - Sin stock</span>
</li>
</ul>
</div>
<!-- development version, includes helpful console warnings -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="01.js"></script>
</body>
</html>
- Modificamos el archivo 01.js:
const app = new Vue({
el: '#app',
data: {
titulo: 'Hola mundo con Vue',
frutas1: ['Manzana', 'Pera', 'Platano'],
frutas: [
{nombre: 'Pera', cantidad: 10},
{nombre: 'Manzana', cantidad: 0},
{nombre: 'Platano', cantidad: 11}
],
nuevaFruta: ''
},
methods:{
/*agregarFruta: function(){
// methods es una palabra reservada.
// Forma vieja de agregar función,
// a continuación la nueva forma.
}*/
agregarFruta(){
// console.log('diste click');
this.frutas.push({
nombre: this.nuevaFruta, cantidad: 0
})
}
}
});
# 03 Keyup, v-model y Computed | Curso de Vue.js 😍 Desde Cero
Apuntes:
- Modificamos el archivo 01.html:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Hola mundo con Vue.js</title>
</head>
<body>
<div id="app">
<h1>{{ titulo }}</h1>
<input type="text" v-model="nuevaFruta" @keyup.enter="agregarFruta">
<button @click="agregarFruta">Agregar</button>
<ul>
<li v-for="fruta of frutas">
<input type="number" v-model.number="fruta.cantidad">
{{fruta.nombre}}
<button @click="fruta.cantidad++">+</button>
<span v-if="fruta.cantidad === 0"> - Sin stock</span>
</li>
</ul>
<h4>TOTAL: {{sumarFrutas}}</h4>
</div>
<!-- development version, includes helpful console warnings -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="01.js"></script>
</body>
</html>
- Modificamos el archivo 01.js:
const app = new Vue({
el: '#app',
data: {
titulo: 'Hola mundo con Vue',
frutas1: ['Manzana', 'Pera', 'Platano'],
frutas: [
{nombre: 'Pera', cantidad: 10},
{nombre: 'Manzana', cantidad: 0},
{nombre: 'Platano', cantidad: 11}
],
nuevaFruta: '',
total: 0
},
methods:{
/*agregarFruta: function(){
// methods es una palabra reservada.
// Forma vieja de agregar función,
// a continuación la nueva forma.
}*/
agregarFruta()
// console.log('diste click')
this.frutas.push({
nombre: this.nuevaFruta, cantidad: 0
});
this.nuevaFruta = '';
}
},
computed:{
sumarFrutas(){
this.total = 0;
for(fruta of this.frutas){
this.total += fruta.cantidad;
}
return this.total;
}
}
});
#04 Clases (v-bind:class) | Curso de Vue.js 😍 Desde Cero
Apuntes:
- Recomenzaremos un nuevo proyecto ahora utilizando bootstrap, así como se hizo en los apuntes del primer vídeo pero ahora llamaremos a los archivos 07.html y 07.js.
- Generamos una estructura básica en el archivo html y pegamos los framework de bootstrap en la cabecera y los de vue,js al final del body.
- Archivo 07.html:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vue.js</title>
<!-- CSS only -->
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"
integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk"
crossorigin="anonymous"
/>
<!-- JS, Popper.js, and jQuery -->
<script
src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"
></script>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"
></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"
integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI"
crossorigin="anonymous"
></script>
</head>
<body>
<div id="app" class="container mt-5">
<div :class="['p-3','text-white', fondo]">
<p>Lorem ipsum es el texto que se usa habitualmente en diseño gráfico en
demostraciones de tipografías o de borradores de diseño para probar
el diseño visual antes de insertar el texto final. Lorem ipsum es el texto
que se usa habitualmente en diseño gráfico en demostraciones de
tipografías o de borradores de diseño para probar el diseño
visual antes de insertar el texto final.</p>
</div>
<input type="text" class="form-control my-3" v-model="fondo">
<div class="text-white p-3" :class="{'bg-info': color, 'bg-success': !color}">
<p>Lorem ipsum es el texto que se usa habitualmente en diseño gráfico en
demostraciones de tipografías o de borradores de diseño para probar
el diseño visual antes de insertar el texto final. Lorem ipsum es el texto
que se usa habitualmente en diseño gráfico en demostraciones de
tipografías o de borradores de diseño para probar el diseño
visual antes de insertar el texto final.</p>
</div>
<button class="btn btn-primary mt-2" @click="color = !color">Cambiar</button>
</div>
<!-- development version, includes helpful console warnings -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="07.js"></script>
</body>
</html>
- 07.js:
const app = new Vue({
el: '#app',
data: {
fondo: 'bg-warning',
color: false
},
methods: {
}
})
#05 Propiedades Computadas (computed) | Curso de Vue.js 😍 Desde Cero
Apuntes:
- Recomenzaremos un nuevo proyecto ahora utilizando bootstrap, así como se hizo en los apuntes del primer vídeo pero ahora llamaremos a los archivos index.html y app.js.
- Generamos una estructura básica en el archivo html y pegamos los framework de bootstrap en la cabecera y los de vue,js al final del body.
- Archivo index.html:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vue.js</title>
<!-- CSS only -->
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"
integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk"
crossorigin="anonymous"
/>
<!-- JS, Popper.js, and jQuery -->
<script
src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"
></script>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"
></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"
integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI"
crossorigin="anonymous"
></script>
</head>
<body>
<div id="app" class="container mt-5">
<h3>{{mensaje}}</h3>
<h3>invertido: {{invertido}}</h3>
<input type="text" class="form-control" v-model="mensaje">
<hr />
<button class="btn btn-primary" @click="contador++">+</button>
<button class="btn btn-danger" @click="contador--">-</button>
<h3>
{{contador}}
</h3>
<div class="progress">
<div class="progress-bar" role="progressbar"
:style="{'width': contador + '%'}" aria-valuenow="25" aria-valuemin="0"
aria-valuemax="100"
:class="color"
>
{{contador}}%
</div>
</div>
</div>
<!-- development version, includes helpful console warnings -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="app.js"></script>
</body>
</html>
- Archivo app.js:
const app = new Vue({
el: '#app',
data: {
mensaje: 'hola soy Soluciones++',
contador: 0
},
methods: {
},
computed:{
invertido(){
return this.mensaje.split('').reverse().join('');
},
color(){
return {
'bg-success': this.contador <= 10,
'bg-warging': this.contador > 10 && this.contador < 20,
'bg-danger': this.contador >= 20
}
}
}
})
#06 Ciclo de vida de Vue (Lifecycle) | Curso de Vue.js 😍 Desde Cero
Apuntes:
- Creamos un proyecto como en los casos anteriores.
- Archivo index.html:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vue.js</title>
<!-- CSS only -->
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"
integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk"
crossorigin="anonymous"
/>
<!-- JS, Popper.js, and jQuery -->
<script
src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"
></script>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"
></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"
integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI"
crossorigin="anonymous"
></script>
</head>
<body>
<div id="app" class="container mt-5">
<h3>{{saludo}}</h3>
<button @click="saludo = 'saludos cambiado'">Cambiar</button>
<button @click="destruir()">Destruir</button>
</div>
<!-- development version, includes helpful console warnings -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="app.js"></script>
</body>
</html>
- Archivo app.js:
const app = new Vue({
el: '#app',
data: {
saludo: 'soy ciclo de vida de Vue',
},
methods: {
destruir(){
this.$destroy();
}
},
computed:{
},
beforeCreate(){
console.log('beforeCreate')
},
created(){
console.log('created')
},
beforeMount(){
console.log('beforeMount')
},
mounted(){
console.log('mounted')
},
beforeUpdate(){
console.log('beforeUpdate')
},
updated(){
console.log('updated')
},
beforeDestroy(){
console.log('beforeDestroy')
},
destroyed(){
console.log('destroyed')
}
})
#07 Componentes básicos | Curso de Vue.js 😍 Desde Cero
Apuntes:
- Archivo index.html:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Componentes</title>
<!-- development version, includes helpful console warnings -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="componentes/saludo.js"></script>
<script src="componentes/contador.js"></script>
</head>
<body>
<div id="app">
<saludo></saludo>
<contador></contador>
<!--Los contadores son independientes-->
<contador></contador>
</div>
<script>
new Vue({
el: '#app',
data:{
}
})
</script>
</body>
</html>
- Archivo componentes/saludo.js:
Vue.component('saludo',{
//template: '<h1>Saludo de forma estática</h1>',
template: //html
`
<div>
<h1>{{saludo}}</h1>
<h3>Saludo estático</h3>
</div>
`,
data(){
return{
saludo: 'Hola desde Vue'
}
}
});
- Archivo componentes/contador.js:
Vue.component('contador',{
template: //html
`
<div>
<h3>{{numero}}</h3>
<button @click="numero++">+</button>
</div>
`,
data(){
return{
numero: 0
}
}
});
#08 Comunicación entre componentes (parte 1) | Curso de Vue.js 😍 Desde Cero
Apuntes:
- Archovo index.html:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vue.js</title>
<!-- CSS only -->
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"
integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk"
crossorigin="anonymous"
/>
<!-- JS, Popper.js, and jQuery -->
<script
src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"
></script>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"
></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"
integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI"
crossorigin="anonymous"
></script>
<!-- development version, includes helpful console warnings -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="componentes/padre.js"></script>
<script src="componentes/hijo.js"></script>
</head>
<body>
<div id="app" class="container mt-5">
<padre></padre>
</div>
<script>
new Vue({
el: '#app'
});
</script>
</body>
</html>
- Archivo componentes/padre.js:
Vue.component('padre',{
template: //html
`
<div class="p-5 bg-dark text-white">
<h2>Componente Padre: {{numeroPadre}}</h2>
<button class="btn btn-danger" @click="numeroPadre++">+</button>
<hijo :numero="numeroPadre"></hijo>
</div>
`,
data(){
return{
numeroPadre: 0
}
}
})
- Archivo componentes/hijo.js:
Vue.component('hijo',{
template: //html
`
<div class="py-5 bg-success">
<h4>Componente Hijo: {{numero}}</h4>
</div>
`,
props: ['numero']
})
#09 Comunicación entre componentes (parte 2) | Curso de Vue.js 😍 Desde Cero
Apuntes:
- index.html:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vue.js</title>
<!-- CSS only -->
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"
integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk"
crossorigin="anonymous"
/>
<!-- JS, Popper.js, and jQuery -->
<script
src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"
></script>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"
></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"
integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI"
crossorigin="anonymous"
></script>
<!-- development version, includes helpful console warnings -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="componentes/padre.js"></script>
<script src="componentes/hijo.js"></script>
</head>
<body>
<div id="app" class="container mt-5">
<padre></padre>
</div>
<script>
new Vue({
el: '#app'
});
</script>
</body>
</html>
- componentes/padre.js:
Vue.component('padre',{
template: //html
`
<div class="p-5 bg-dark text-white">
<h2>Componente Padre: {{numeroPadre}}</h2>
<button class="btn btn-danger" @click="numeroPadre++">+</button>
{{nombrePadre}}
<hijo :numero="numeroPadre" @nombreHijo="nombrePadre = $event"></hijo>
</div>
`,
data(){
return{
numeroPadre: 0,
nombrePadre: ''
}
}
})
- componentes/hijo.js:
Vue.component('hijo',{
template: //html
`
<div class="py-5 bg-success">
<h4>Componente Hijo: {{numero}}</h4>
<h4>Nombre: {{nombre}}</h4>
<button @click="numero++">+</button>
</div>
`,
props: ['numero'],
data(){
return{
nombre: 'Soluciones++'
}
},
// Esta función se ejecuta una vez ya se cargó en template.
mounted(){
this.$emit('nombreHijo', this.nombre);
},
})
Comentarios
Publicar un comentario