¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Vue.js
  3. Utilizar los formularios
Extrait - Vue.js Desarrolle aplicaciones web modernas en JavaScript con un framework progresivo
Extractos del libro
Vue.js Desarrolle aplicaciones web modernas en JavaScript con un framework progresivo Volver a la página de compra del libro

Utilizar los formularios

Los elementos de formulario

1. La utilización de librerías de terceros

Ahora que hemos visto los fundamentos del framework y todas las directivas, veremos cómo construir un formulario de contacto en una página.

Para que la representación gráfica sea más agradable, puede reutilizar las clases CSS de su proyecto existente. Para un nuevo proyecto, es recomendable utilizar librerías de componentes gráficos, que proporcionen código CSS y componentes reactivos listos para usar. Por lo tanto, es posible crear páginas reactivas con un diseño elegante, sin tener grandes habilidades de diseño web.

Hay varias librerías de gráficos. Aquí tiene una lista de las librerías más populares.

  • Vuetify: https://vuetifyjs.com/es-ES/

    Vuetify es la librería más utilizada por los desarrolladores de Vue.js. Sigue la especificación de Material Design de Google, tiene documentación muy detallada y ofrece soporte a largo plazo para sus diferentes versiones (LTS). En la actualidad es la librería con mayor comunidad de desarrolladores y que ofrece soporte a empresas. Además, su documentación está completamente traducida al español.

  • Bootstrap Vue: https://bootstrap-vue.org/

    Bootstrap Vue es una librería de componentes basada en el popular framework CSS Boot-strap, desarrollado por Twitter. También está muy bien documentado y es más flexible. Por tanto, es posible personalizar fácilmente el diseño de los componentes. 

  • Vue Material : https://vuematerial.io/

    Vue Material es una librería más liviana que también sigue la especificación de Material Design de Google. Es menos popular y completo que Vuetify. Ideal para la creación de prototipos de una aplicación.

  • Vuesax : https://vuesax.com/

    Viewsax aún no tiene una versión estable, pero ofrece un diseño diferente al de otras librerías.

  • Buefy: https://buefy.org/

    Buefy es una librería muy ligera basada en el framework CSS de código abierto de Bulma.

  • Element UI : https://element.eleme.io/#/es

    Es una librería de componentes basada en Vue.js y más orientada a aplicaciones web y de escritorio. Su documentación también está traducida al español.

  • Framework de Quasar:...

Los campos particulares del formulario

1. Campo fecha

Ahora agreguemos un campo Fecha de nacimiento a nuestro formulario. Usaremos el siguiente patrón: dd/mm/aaaa. Por lo tanto, agregamos los datos fechaNacimiento en nuestro modelo y un elemento <input> de tipo de fecha a nuestro formulario.

<label> 
  Fecha de nacimiento: 
  <input type="date" v-model="fechaNacimiento"/> 
</label> 

Resultado:

images/CAP4_PAG11.png

Vemos que podemos seleccionar una fecha de nacimiento menor que 1900 y mayor que la fecha actual. Por lo tanto, sería más lógico limitar el rango de fechas con el atributo min ajustado a 01/01/1900 y max a la fecha actual. Estos campos reciben fechas en formato americano aaaa-mm-dd. Podemos completar el valor del atributo min, pero el atributo max se debería actualizar en función de la fecha de hoy. Cuando se crea la instancia, daremos formato a un elemento de datos fechaDeHoy en nuestro modelo.

Por lo tanto, agregamos el siguiente código al hook created de nuestra instancia:

created() { 
  let now = new Date(); 
  let dia   = ('0'+now.getDate()).slice(-2); 
  let mes  = ('0'+ (now.getMonth()+1)).slice(-2); 
  let anio = now.getFullYear(); 
  this.fechaDeHoy = `${anio}-${mes}-${dia}`; 
}, 
data { 
  // otras propiedades 
  fechaDeHoy: '', 
} 

En nuestro template, tendremos:

<label> 
  Fecha de nacimiento: 
  <input 
    type="date" 
    placeholder="dd/mm/aaaa" 
    min="1900-01-01" 
   :max="fechaDeHoy" 
    v-model="fechaNacimiento" ...

Los modificadores de la directiva v-model

1. Formatear una entrada de texto como número

De forma predeterminada, la directiva v-model transmite o devuelve una cadena de caracteres desde el modelo. Es posible utilizar el modificador .number, que convierte automáticamente la entrada internamente con la función JavaScript parseFloat(). Si esta conversión no es posible, entonces los datos del modelo tomarán por valor una cadena vacía.

Agregamos un dato tamanio al modelo y el siguiente código HTML en el template:

<label> 
  Tamanio: 
  <input type="number" v-model.number="tamanio"/> 
  metros 
</label> 

Resultado:

images/CAP4_PAG18.png

Las comas también se convierten en un punto en este tipo de campo.

2. Reaccionar al evento change en lugar de a input

Para un campo de tipo text, la directiva v-model cambia de manera predeterminada el valor de los datos del modelo al que está vinculado en cada evento input, es decir, los datos se actualizan en cada carácter escrito. Es posible cambiar este comportamiento en el evento change, para que la actualización de datos se aplique cuando abandone el campo. Usamos el modificador .lazy para esto.

Si agregamos este modificador al campo Apellido:

<label> 
  Apellido: 
  <input v-model.lazy="apellido" /> 
</label> 

Resultado:

images/CAP4_PAG19.png

Podemos...

La validación del formulario

1. Las librerías de validación de formulario

La validación de formularios siempre es un tema difícil para el desarrollo de frontend. Es posible que deba aplicar varias reglas de validación a un control de edición, para que este último respete un formato particular o ciertos valores, de acuerdo con las reglas de negocio.

En Vue.js, hay dos librerías de validación muy populares.

2. Utilizar VeeValidate

a. Instalar

Para usar VeeValidate, simplemente agregue el siguiente CDN a su página:

<script src="https://unpkg.com/vee-validate@latest"></script> 

o descargue el archivo vee-validate.js y cárguelo en su página:

<script src="rurta/vee-validate.js"></script> 

Si está utilizando Vue-cli en su proyecto o un empaquetador de módulos como Webpack, puede instalar VeeValidate con los administradores de paquetes npm o yarn:

npm install vee-validate --save 
 
yarn add vee-validate 

Para usarlo posteriormente, declaramos el componente ValidationProvider de manera global: 

  • cuando la librería se carga en la página con la etiqueta <script>:

Vue.component('validation-provider', VeeValidate.ValidationProvider); 
  • con sintaxis ES6 en el archivo main.js, en un proyecto con un empaquetador de módulos: 

import Vue from 'vue'; 
import { ValidationProvider, extend } from 'vee-validate'; 
 
Vue.component('ValidationProvider', ValidationProvider); 

Seguidamente, en el formulario solo tiene que englobar los campos en una etiqueta <validation-provider>. Agregamos el atributo rules, que recibe como valor los nombres de las reglas que se deben aplicar, separados por |, y la directiva v-slot con un objeto cuyo valor es la propiedad errors. Esta propiedad toma como valor el array de los diferentes errores generados.

<validation-provider rules="regla1|regla2" v-slot="{ errors }"> 
  <input v-model="email" type="text"> 
  <span>{{...