Created
October 5, 2019 17:23
-
-
Save josepereza/b3e501098350b896c26826b6a7674664 to your computer and use it in GitHub Desktop.
vue js - empezando con vue js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| sfsf |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Vue2JS - Empezando con VueJS
Como iniciar Vue con CDN
Para iniciar Vue podemos utilizarlo a través de un CDN o añadiendo el archivo físicamente. Aquí empezarémos a utilizarlo a través de CDN. El enlace del CDN puede variar con el tiempo, pero cuando escribo este Gist es el siguiente:
Creamos un archivo
htmly añadimos el CDN:/index.htmlUna vez creado el html con el script del CDN, inicializamos un script con una nueva instancia de Vue. Vamos a llamar al elemento
app:Estamos que debemos de crear un
divcon el idapppara que se inicialice dentro Vue.Vamos a inicializar el método
datadonde guardaremos variables y podrémos utilizar a través de interpolación. Vamos a crear un mensajeHola mundo:Componentes
Lo más correcto es tener todo en distintos archivos modularizados, lo que llamamos en Vue
componentes. Así que vamos a crear un archivo en la misma carpeta llamadocomponentsy vamos a llamarlo por ejemplomessage.js(cuando utilicemos el CLI de Vue usaremos la extensión .vue, pero como usamos la versión de CDN es mejor usar .js).Los archivos quedarían de la siguiente manera:
/index.html/components/message.jsCosas importantes
Computed properties
Nos permiten crear nuevas propiedades reactivas que dependen de otra propiedades del objeto
datay que pueden tener una lógica "complicada" (filtros, concatenaciones, etc).Un ejemplo de computed properties sería el siguiente:
/index.htmlHemos añadido un
scriptconcomputed-propertiesy añadido el tag con el mismo nombre<computed-properties></computed-properties>Después añadimos el componente, con una
data, uncomputedcon los elementos a mostrar deldatay untemplate:/components/computed-properties.jsMétodos
Para escribir métodos utilizaremos la palabra
methodsy ahí meteremos los elementos que queramos.En el siguiente ejemplo vemos como implementamos
methods:/index.htmlY el componente es el siguiente:
/components/methods.jsEl evento
v-on:clickes igual que@clickes un atajo.Data Binding con v-model
Es una forma de actualizar datos tanto en la template como en el script, que sean de ida y vuelta. Son muy útiles cuando utilizamos formularios.
La directiva
v-modelespera un dato, en este caso espera el datoframework./index.html/components/vmodel.jsVmodel con formulario y array
Un ejemplo de
v-modelcon formulario y array es el siguiente:/index.html/components/vmodel-checkboxes.jsEmitir eventos a componentes padres con $emit
Los eventos siempre se emiten del elemento hijo al elemento padre (de abajo hacia arriba). Para entender esto tenemos el siguiente ejemplo:
/index.htmlVemos que utilizamos el componente
<emit>el cual le pasamos un eventov-oncon@con el nombre@show_card_brandy le pasamos un método. En la misma página añadimos el método con elalert./components/emit.js$emitnos permite pasar dos cosas, el primero es el evento que queremos emitir y el segundo el dato le queremos pasar cuando pasemos el evento:<p @click="$emit('show_car_brand', carBrand)">Texto</p>Acceso a datos del componente padre
En el
index.htmlinyectamos el script del componente y ponemos la etiqueta del component en este casoparent-data./index.htmlAquí creamos un archivo llamado
parent-data.jsdonde pondrémos una template accediendo al dato que queremos. Usamos$parentpara acceder al elemento de arriba (padre). Si queremos subir niveles hacia arriba, usuariamos$parentlas veces que quisieramos. Para subir por ejemplo tres niveles usuariamos$parent.$parent.$parent. El ejemplo del componente es el siguiente:/components/parent-data.jsAcceso a datos del componente hijo utilizando referencias
Creamos una referencia en nuestro componente, en este caso se llama
<child-data>y la referencia se puede llamar como quieras, en el ejemplo le hemos llamadoref="childData". En el ciclo de vida de Vue, vamos a poner los datos del componente cuando estémounted./index.htmlAquí tenemos el
cmpNameque deseamos pasar./components/child-data.jsEjecutar métodos del componente hijo utilizando referencias
Podemos llamar al método primero invocando a nuestro componente
child-methodscon la referenciachildMethod. Vamos a poner un ejemplo en elmountedcon unsetTimeoutllamándolo de la siguiente manera:this.$refs.childMethod.showCmpName();Hacemos un ref, despues llamamos al método de la referencia y finalmente el método del hijo./index.html/componentes/.jsIntroducción a los formularios
Ejemplo básico de login
/index.htmlCreamos unos datos típicos como son
emailypassword. Creamos el métodologindonde cambiamos elloggedatruesi la condiciónthis.user.email === 'test@m.com' && this.user.password === 1234estrue.La directiva
v-showla utilizamos si queremos mostrar el contenido, en este caso sólo se mostrará siloggedestrue.Para el formulario utilizamos
@submitque por si sólo hace una redirección. Para evitar esta redirección pondremos@submit.preventy en este caso le decimos que haga caso al métodologin, quedando de la siguiente manera:<form @submit.prevent="login">.v-modelnos permite hacer databinding, que hace que cambie los datos del componente./components/login-form.jsBucles con la directiva v-for
Nos cubre nuestras necesidades para iterar información. En
index.htmlsólo habrá que invocar el script y el componente<loops>./index.htmlEn el componente creamos un array de Frameworks, después en el template es donde utilizamos el v-for. En el
<ul>usamos la condiciónv-ifpara no mostrar nada si en el array no hay nada guardado.La directiva
v-forutilizamos si queremos elindexpara mostrar el indice. El array se llamaframeworksy por normativa solemos utilizar el elemento para mostrar en singular, así quev-forquedaría de la siguiente manera:v-for="(framework, index) in frameworks". Para que sea clave única y no se repita utilizamos:key, y le pasamos el elementoframework.idya que no se repite.Dentro del
<li>dibujamos ya toda la información accediendo a través deframework./components/loops.jsCondicionales con la directiva v-if
El
v-iflo utilizamos para poder hacer condicionales y mostrar o no datos.En nuestro
index.htmlsólo vamos a tener que invocar al componente a través de su archivojsy después a través de su tag<conditionals>./index.htmlTenemos un dato que es
agey en elinputle decimos que suv-modelde referencia esage. Ya después hacemos condiciones a traves de la directivav-if. Cuando queremos añadir otro elemento usaremosv-else-ify cuando ya no tengamos que ver ninguna condición añadimosv-else./components/conditionals.jsSlots, definiendo secciones para poder sobrescribir
Un slot nos permite definir unas layout pero podiendo sobrescribir el contenido.
Después de invocar el
jsde nuestro componente y llamarlo por<slot>meteremos nuestros elementos dentro.Ejemplo de Layout
/index.htmlHacemos el "template" del
sloty a continuación analizamos como se comporta el código./components/slots.jsSi nos fijamos en esta parte del código junto a esta:
Vemos que si no definimos un
<template slot="nameSlot">realmente nos creará un main, aunque lo creemos en primera instancia. Unslotlo iremos construyendo según su plantilla y o sino lo llevará a último lugar.Watchers
Haciendo cosas cuando algún dato cambie, peticiones HTTP GET con Fetch
En el
index.htmlsólo añadimos la ruta del archivo javascript y invocamos al componente que le hemos llamadowatchers./index.htmlEn
watcherstenemos dosdatade un usuario nuevousery de un usuario anterior o viejooldUser, los dos sin definir. Después a través de unasync-awaittraemos información de un API que nos dá información de usuario aleatoria. Pasamos la información en unJSONy elegimos sólo la primera opción. Una vez hemos guardado esa información, componemos un usuario a través de sutitle,firstylast./components/watchers.jsTenemos el método
watchque es nuestro watcher. Estará viendo el estado de nuestros datos y recogerá lo que queramos. En elwatchernos va a pedir unnewValuey unoldValue. Y así en el template, vamos a poder ir recogiendo estos datos y mostrándolos por la pantalla.Computed Properties con getters y setters
En el documento
index.htmlinvocaremos el archivojavascriptdecomputed-properties-getset.jse iniciamos el componente llamado<computed-properties-getset>./index.htmlCreamos el componente con un dato 0 llamado
amount. Dentro decomputedcreamos unamountFormatteddonde tendremos dos funciones llamadasget()yset(). Dentro de ellas vamos a poder jugar para tener el valor o poder modificarlo después./components/computed-properties-getset.jsCreamos un
v-modelcon la referencia deamounty mostramos en pantalla elamountFormatted.Carga de componentes dinámicos con el componente component
Para este ejemplo usaremos más archivos. Vamos a crear dentro de la carpeta
componentsla carpetadynamic-componentscreando los archivoscmp1.js,cmp2.jsycmp3.js. Dentro de cada archivo habrá lo siguiente, cambiando el nombre delcmp.components/dynamic-components/cmp1.jsEn el
index.htmlcargamos primero los componentes dinámicoscmpX.jsy después el cargador de componentesload-dynamic-components.js./index.htmlEn el componente creamos un
arraycon los nombres de los componentes y decimos cual es el componente actual a mostrar concurrentComponent. En methods creamos un método llamdochangeComponent()para modificar el componente actual.En el template visualizamos todos los botones a través de una directiva
v-fory en el evento@clickcambiamos a que botón le hemos dado para actualizar su estado./components/load-dynamic-components.jsPara mostrar el componente actual, utilizamos la etiqueta
<component>con la directivais(v-bind:ises lo mismo que:is) y mostramos que componente es el actual.Mixins, añadiendo funcionalidad extra a nuestros componentes
Un mixin es una forma de heredar datos para poder reutilizar información.
En el
index.htmlinvocaremos como siempre el archivojavascripty el componente, en este caso lo hemos llamado<mixins>. No tenemos que hacer nada más, toda la lógica la lleva eljavascript./index.htmlVamos a crear una variable con todo nuestro
mixin./components/mixins.jsA la hora de crear nuestro componente, deberemos llamar a
mixinsen plural en un array, y ahí llamar a nuesta variable con elmixin. Tenemos que tener cuidado ya que habrán cosas que se ejecutaran antes o después o se pueden reescribir.Desarrollar nuestra primera directiva, dando el foco a inputs
Las directivas es mejor que se invoquen al principio. Lo único que vamos a hacer en este ejemplo es darle
focusa un input. Para darle focus creamos una carpeta llamadadirectivesy dentro de esa carpeta creamos un archivo llamadofocus.js.En el
index.htmlle añadimos el archivojavascriptde la directiva./index.htmlCreamos la directiva
focus, y le damosfocusal elementoel./directives/focus.jsEn el ejemplo vamos a darle
focusal primerinputque habíamos creado (vmodel.js). Para asignarle la directiva, se la daremos a través dev-nombredirectivaen este casov-focus. El archivo modificado devmodel.jsquedaría de la siguiente forma./components/vmodel.jsDirectiva para aplicar estilos a componentes pasando parámetros
Binding son los datos que vamos a pasar a la directiva para poder acceder desde el archivo.
/index.htmlCreando la directiva abajo, usando
bindingpodemos cambiar los valores de este. En estamos diciendo de introducir unbackgroundColory uncolor. Se lo asignamos al componente que queramos con unv-change-stylesy se le pasamos los valores de esta manera (ejemplo con el componentemessage):<message v-change-styles="{backgroundColor: 'red', color: 'white'}"></message>/directives/change-styles.jsDesarrollar un filtro con paso de parámetros para establecer la Currency
Para este ejemplo editaremos el archivo
computed-properties-getset.jsdonde añadiremos el nombre del filtro y le pasaremos un valor. En elindex.htmlañadimos el filtro en la carpetafilterscon el archivocurrency-filter.js./index.htmlCreamos el filtro de la siguiente manera, recogiendo el valor y después un currency que será el tipo de moneda.
/filters/currency-filter.jsAquí con un pipeline utilizaremos el filtro.
/components/computed-properties-getset.jsDesarrollar plugin con argumentos para mostrar el perfil de un usuario
Un plugin sirve para darle una funcionalidad adicional a VueJS. Para realizar un plugin tenemos que crear un archivo de la siguiente manera:
/plugins/aboutMe.jsCreamos una const con los datos y el método install. Le pasamos el primer parámetro que siempre tiene que ser
Vuey después le añadimos unasoptions. Destructuramos el objeto conconst { job } = optionsy le añadimos unprototypecon el nombre$loqueseapara poder llamarlo. En este caso vamos a pedirnameyage./index.htmlProps
Paso de datos a componentes al utilizarlo, tipos y validación
Una vez más añadimos el script de
javascripty ponemos el componente con varios datos que pasarle alprops. En este caso sería esto:<props name="Jose" surname="García" :age="37"></props>./index.htmlEn el componente, inicializamos una instancia de Vue con el nombre
props, y definimos los valores en el métodopropsque vamos a pasarle:nameyage. Además vamos realizar una validación de edad./components/.jsProps Vs Data y reactividad
Las Props en Vuejs nos permiten pasar datos a un componente al momento de utilizarlo:
En este caso al componente super-componente le estamos pasando un dato de entrada llamado nombre, para utilizarlo en dicho componente haríamos lo siguiente:
El problema está en que si queremos que este dato sea reactivo utilizando v-model tendríamos un error:
[Vue warn]: Avoid mutating a prop directlyEsto significa que no podemos modificar una Prop de forma directa, para solucionar esto realmente existen muchos caminos, pero uno muy común que sirve en la mayoría de los casos es utilizar en lugar de un valor, un objeto: