Una tendencia que ha aumentado en los últimos años es el uso de bibliotecas y frameworks CSS para el desarrollo de sitios y sistemas de manera más rápida y optimizada. Es muy probable que ya hayas oído hablar o incluso trabajado con frameworks como Bootstrap, Materialize o Bulma. Ellos son una prueba de esta tendencia y también muestran cómo tales frameworks pueden ayudarnos mucho en cuestión de productividad.
También existen muchas bibliotecas que tienen este mismo objetivo, pero que están orientadas a frameworks JavaScript. Un ejemplo de esto es Vuetify. Fue creado en 2016 con el objetivo de proporcionar una serie de componentes estilizados para aplicaciones Vue JS, basándose en Material Design.
En este artículo aprenderemos a instalar esta biblioteca en un proyecto Vue, además de crear nuestro primer código con Vuetify, que será una pantalla de inicio de sesión en un sistema administrativo.
Iniciando Nuevo Proyecto
Vuetify necesita ser agregado a un proyecto Vue. Por eso, iniciaremos un nuevo proyecto desde cero con vue-cli.
Para comenzar, vamos a instalar la herramienta Vue CLI, a través del siguiente comando:
npm install -g @vue/cli
Con esta herramienta de línea de comandos instalada, podemos iniciar un nuevo proyecto en Vue. Crearemos un proyecto llamado hcode-admin, ejecutando el siguiente comando en la Terminal:
vue create hcode-admin
Al ejecutar este comando, se iniciará el proceso de creación y necesitaremos responder algunas preguntas. La primera pregunta es si deseamos usar una conexión más estable para una instalación más rápida. Vamos a escribir “Y” y presionar Enter:
A continuación, seleccionaremos qué versión de Vue deseamos usar, además de las herramientas que utilizaremos para la compilación del proyecto. Elegiremos la versión 2, ya que, hasta la fecha de este artículo, Vuetify no funciona con Vue 3. Así que simplemente presionaremos Enter:
Con esto, la creación de nuestro proyecto será iniciada:
Después de algunos segundos, veremos el mensaje de éxito a continuación:
Informa que la creación del proyecto fue exitosa y ahora estamos listos para iniciar su desarrollo.
Agregando Vuetify al Proyecto
Ahora vamos a agregar Vuetify a nuestro proyecto. Primero, accederemos a la carpeta del proyecto con el comando cd hcode-admin.
A continuación, ejecutaremos el comando a continuación:
vue add vuetify
Se iniciará un nuevo proceso de instalación y necesitaremos responder algunas nuevas preguntas.
La primera pregunta será si deseamos realizar la instalación sin antes agregar nuestros archivos a Git. Elegiremos “y” y presionaremos Enter:
A continuación, necesitamos elegir cuál será el preset de nuestro Vuetify. Vamos a elegir el preset por defecto. Así que simplemente presionaremos Enter:
La descarga y adición de Vuetify al proyecto serán iniciadas. Después de algunos segundos, veremos el mensaje a continuación:
Este mensaje informa que la instalación de Vuetify fue un éxito!
Ahora podemos iniciar el servidor de nuestro proyecto. Para eso, simplemente necesitamos ejecutar el siguiente comando:
npm run serve
Al acceder a la dirección http://localhost:8080/ en nuestro navegador, veremos el siguiente resultado:
Así vemos que Vuetify ya está siendo reconocido en nuestro proyecto. Muy simple, ¿verdad?
Ahora vamos a comenzar a desarrollar la estructura de nuestro formulario de inicio de sesión utilizando esta biblioteca.
Conociendo Primeros Componentes de Vuetify
La primera cosa que vamos a hacer es eliminar el archivo de componente llamado HelloWorld.vue, localizado en src/components.
A continuación, crearemos en este mismo directorio un archivo llamado AdminForm.vue. Este nombre sigue la recomendación del propio Vue de informar nombres compuestos a nuestros componentes.
Además, es importante recordar que una aplicación Vue utiliza la estructura de un Single File Component. Esto significa que el HTML, CSS y JavaScript del componente están en el mismo archivo.
La estructura HTML de este componente inicialmente será la siguiente:
<template>
<v-container class="grey lighten-3" id="login-page">
<v-row class="d-flex justify-center">
<v-col
cols="6"
>
<v-img src="../assets/hcode.svg" id="hcode-image"></v-img>
</v-col>
</v-row>
</v-container>
</template>
Explicando: es la etiqueta utilizada por Vue para iniciar el HTML del componente. El componente
El componente
También aprovechamos para definir el componente
Antes de realizar nuestra prueba, solo vamos a agregar algunos estilos a nuestros elementos, a través de la etiqueta , utilizada en un Single File Component para definir el CSS de la página:
<style scoped>
#login-page {
margin-top: 10px;
}
#hcode-image {
margin: 20px 0;
}
</style>
Agregamos el atributo scoped a esta etiqueta para que solo la página actual se vea afectada por los estilos y no la aplicación entera.
Ahora, al acceder a nuestro navegador, vemos lo siguiente:
¡Excelente, nuestra imagen y contenedor ya están apareciendo!
Agregando Tabs
Es muy práctico cuando vemos en una página de inicio de sesión tanto la opción para realizar el inicio de sesión como también para crear un nuevo usuario. Haremos esto en nuestro ejemplo, creando pestañas, o tabs, para estas acciones.
El componente utilizado para esto es
<v-tabs
fixed-tabs
background-color="blue-grey lighten-5"
color="black"
v-model="tabsForm"
>
</v-tabs>
La propiedad fixed-tabs define que nuestro componente ocupará completamente el espacio de la pantalla en que está inserto. La propiedad background-color define el color de fondo del elemento, que fue elegido de la paleta de colores de Vuetify. La propiedad color define el color del texto.
La propiedad v-model es estándar de Vue. En este contexto se usa para que el cambio de los elementos ocurra de acuerdo con la pestaña que hacemos clic.
Necesitamos de esta forma crear una propiedad en nuestra instancia de Vue llamada tabsForm. Podemos definir un valor nulo para ella. Nuestra etiqueta quedará de la siguiente forma:
<script>
export default {
name: 'AdminForm',
data: () => ({
tabsForm: null
})
}
</script>
Ahora podemos agregar los elementos de nuestras pestañas al HTML. Para eso, utilizaremos el componente
<v-tab
key="register"
>
Registrar
</v-tab>
<v-tab
key="login"
>
Iniciar Sesión
</v-tab>
Una propiedad importante que necesitamos tener en cuenta es la propiedad key, ya que se usará más tarde para hacer la relación entre la pestaña de nuestras tabs y su contenido.
Hasta el momento, nuestro código es el siguiente:
Ahora, al acceder a nuestro proyecto, vemos que está de la siguiente forma:
¡Ahora nuestras pestañas están correctamente definidas!
Creando Formularios de Registro e Inicio de Sesión
El siguiente paso es crear la estructura de nuestros formularios y luego relacionarlos con nuestras pestañas.
Para eso, crearemos otro componente
Nuestro código será así:
<v-row class="d-flex justify-center">
<v-col cols="4">
<v-tabs-items
v-model="tabsForm"
cols="3
>
</v-tabs-items>
</v-col>
</v-row>
Observa que nuevamente hemos utilizado la propiedad v-model="tabsForm", para realizar la conexión entre las pestañas y sus respectivos contenidos.
Ahora vamos a agregar nuestro primer ítem de las pestañas, que será un formulario de registro. El contenido de esta estructura será el siguiente:
<v-tab-item
key="register"
>
<v-form class="text-center grey lighten-3">
<v-text-field
v-model="name"
label="Nombre"
:rules="nameRules"
required
></v-text-field>
<v-text-field
v-model="email"
label="Correo Electrónico"
:rules="emailRules"
required
></v-text-field>
<v-text-field
v-model="password"
label="Contraseña"
type="password"
:rules="passwordRules"
required
></v-text-field>
<v-btn
color="success"
class="justify-space-between"
>
Registrar
</v-btn>
</v-form>
</v-tab-item>
Explicando: la propiedad key utilizada en el componente
El componente
Al acceder a nuestro proyecto nuevamente, vemos el siguiente resultado:
¡Nuestro formulario fue creado con éxito! Sin embargo, observa que la validación del correo electrónico no está funcionando, ya que estamos ingresando un formato incorrecto y no se devuelve ningún error. Para resolver esta cuestión, utilizaremos una propiedad llamada rules, que fue definida en nuestro componente. Representa algunas reglas para la validación del formulario.
Ahora volveremos a nuestro código y definiremos lo siguiente en la etiqueta :
nameRules: [
value => !!value || 'El nombre es obligatorio',
value => (value &amp;amp;amp;amp; value.length >= 3) || 'El nombre debe tener al menos 3 caracteres',
value => (value &amp;amp;amp;amp; value.length <= 10) || 'El nombre debe tener menos de 10 caracteres'
],
emailRules: [
value => !!value || 'El correo electrónico es obligatorio',
value => /.+@.+\..+/.test(value) || 'El correo electrónico no es válido',
],
passwordRules: [
value => !!value || 'La contraseña es obligatoria',
value => (value &amp;amp;amp;amp; value.length >= 5) || 'La contraseña debe tener al menos 5 caracteres'
]
Cada array está identificado con el contexto en que su validación será aplicada. En la validación nameRules estamos garantizando que el nombre sea informado y tenga entre 3 y 10 caracteres. La validación emailRules asegura que el correo electrónico sea informado y que tenga el formato correcto. Y finalmente, la validación passwordRules garantiza que se informe la contraseña y que tenga al menos 5 caracteres.
Con esto, nuestro código JavaScript quedará de la siguiente manera:
Así, al acceder a nuestro sitio e ingresar datos inválidos, veremos un error, como podemos ver en la imagen a continuación:
Por último, solo necesitamos agregar el segundo formulario a nuestra lista de tabs. Haremos esto con el siguiente código:
<v-tab-item
key="login"
>
<v-form class="text-center grey lighten-3">
<v-text-field
v-model="email"
label="Correo Electrónico"
:rules="emailRules"
required
></v-text-field>
<v-text-field
v-model="password"
label="Contraseña"
type="password"
:rules="passwordRules"
required
></v-text-field>
<v-btn
color="primary"
class="justify-space-between"
>
Acceder
</v-btn>
</v-form>
</v-tab-item>
Observa que este formulario tiene una propiedad key diferente, ya que se refiere a otra acción en nuestra página. Sin embargo, está utilizando las mismas funciones de validación a través de la propiedad rules.
Cuando accedemos nuevamente a nuestro proyecto, vemos el siguiente resultado:
De esta manera, si deseas cambiar de una pestaña a otra, funcionará normalmente ?!
Conclusión
En este artículo creamos nuestro primer proyecto usando Vuetify. Puedes consultar el código desarrollado en nuestro GitHub.
Esperamos que este artículo haya podido ayudarte a entender qué es esta biblioteca y cómo puede ayudarnos en nuestros proyectos en Vue. Si deseas aprender más sobre este increíble framework, no dejes de consultar nuestro Curso Completo de Vue JS ?.
¡Hasta el próximo artículo!