Vue datepicker banner

Cuando estamos construyendo un formulario o algún componente en nuestras aplicaciones es probable que queramos agregar la opción de seleccionar una fecha y aunque los navegadores modernos permiten incluir un datepicker directamente con HTML sin necesidad de usar JavaScript, dicha opción ofrece menos posibilidades de personalización.

vuejs-datepicker es una librería de Vue.js que nos permite agregar un datepicker que permite ser personalizado y con el cual podemos manipular el valor seleccionado en tiempo real.

Instalación

Para instalar vuejs-datepicker ejecutamos el siguiente comando de NPM:

npm install vuejs-datepicker --save

Luego debemos importar el componente:

import Datepicker from 'vuejs-datepicker';

export default {
    components: {
        Datepicker
    }
    // ...
}

También puedes incluir la librería directamente desde el CDN:

<script src="https://unpkg.com/vuejs-datepicker"></script>

Luego sólo debemos importarla:

<script>
const app = new Vue({
    el: '#app',
    components: {
        vuejsDatepicker
    }
})
</script>

Utilizando el datepicker

El uso es muy simple, sólo debemos incluir el datepicker en nuestra plantilla:

<datepicker></datepicker>

Si estás importando la librería desde el CDN debes utilizar <vuejs-datepicker>:

<vuejs-datepicker></vuejs-datepicker>

Podemos pasar un valor por defecto con :value el cual debe ser un objeto de tipo Date:

data () {
    return {
	date: new Date(2016, 9, 16)
    }
}

Luego en nuestra plantilla pasamos el valor:

<datepicker :value="date"></datepicker>

El objeto Date cuenta los meses desde cero en lugar de uno por lo que el mes mostrado al pasar el argumento 9 es octubre (enero sería 0).

También podemos usar v-model para que el valor sea reactivo y se actualice en caso de que nuestros datos cambien:

<datepicker v-model="date"></datepicker>

Podemos pasar una propiedad name para luego procesar el valor seleccionado como si se tratara de un elemento de formulario:

<datepicker v-model="date" name="fecha"></datepicker>

Emitiendo eventos

Podemos emitir eventos al abrir, cerrar o seleccionar un valor en el datepicker:

  • Con @opened podemos emitir un evento al abrir el datepicker.
  • Con @closed podemos emitir un evento al cerrar el datepicker.
  • Con @selected podemos emitir un evento al seleccionar un valor en el datepicker.

Por ejemplo, podemos ejecutar el método datepickerAbierto al abrir el datepicker, fechaSeleccionada al seleccionar una fecha y datepickerCerrado al cerrarlo:

// Datepicker con los eventos a emitir
<datepicker v-model="date" name="fecha" 
    @opened="datepickerAbierto" 
    @selected="fechaSeleccionada" 
    @closed="datepickerCerrado">
</datepicker>

// Nuestros métodos
methods: {
    datepickerAbierto: function() {
	console.log('El datepicker ha sido abierto');
    },
    fechaSeleccionada: function() {
        console.log('Una fecha ha sido seleccionada');
    },
    datepickerCerrado: function() {
        console.log('El datepicker ha sido cerrado');
    }
}

Ten en cuenta que el evento closed es llamado automáticamente cuando ocurre el evento selected.

Mostrando el datepicker directamente

Con la propiedad inline podemos mostrar el datepicker directamente sin necesidad de seleccionar un campo de texto:

<datepicker v-model="date" name="fecha" :inline="true"></datepicker>

Otros eventos y propiedades

Tenemos una serie de eventos adicionales que podemos utilizar:

  • selectedDisabled: Ejecuta un evento si una fecha deshabilitada es seleccionada.
  • cleared: Ejecuta un evento si la fecha seleccionada es removida.
  • changedMonth: Ejecuta un evento cuando el mes ha cambiado.
  • changedYear: Ejecuta un evento cuando el año ha cambiado.
  • changedDecade: Ejecuta un evento cuando la década ha cambiado.

Podemos pasar diferentes propiedades adicionales al datepicker, como clear-button que muestra un ícono para remover el valor seleccionado. Esta propiedad puede ser usada junto con cleared para ejecutar un evento cuando el valor sea removido:

<datepicker v-model="date" @cleared="valorRemovido" clear-button></datepicker>

Otras propiedades que podemos usar son:

  • monday-first que muestra el inicio de la semana los días lunes. El valor por defecto es false.
  • calendar-button agrega un botón que al ser presionado muestra el datepicker.
  • bootstrap-styling para agregar los estilos de Bootstrap.
  • disabled que deshabilita el datepicker.
  • typeable permite escribir la fecha directamente.
  • calendar-class permite agregar una clase de CSS para personalizar el calendario.
  • input-class permite agregar una clase de CSS para personalizar el campo.

Puedes ver una lista completa de las propiedades en el repositorio de Github de la librería.

Mostrando el datepicker en español

Podemos mostrar los días y los meses en español importando locale directamente desde la librería:

import { es } from 'vuejs-datepicker/dist/locale'

Luego debemos incluir el valor en nuestros datos:

data () {
    return {
      es: es,
      date: new Date(2016, 9, 16)
    }
}

Finalmente agregamos la propiedad language con el valor es a nuestro datepicker:

<datepicker v-model="date" :language="es"></datepicker>

Como puedes ver el funcionamiento de esta librería es muy sencillo y práctico. Espero que te haya gustado el tutorial y te sea útil. En el material relacionado podrás encontrar mucho más contenido sobre Vue.js además del repositorio de Github de vuejs-datepicker.

Material relacionado

No olvides seguirnos en Twitter y suscribirte a nuestro boletín:

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.