Filtros en Vue: Formateo de Duraciones de Canciones en Componentes

Clase 35 de 53Curso Profesional de Vue.js 2

Resumen

¿Qué son los filtros en Vue.js y por qué son importantes?

Los filtros en Vue.js son herramientas poderosas que te permiten modificar la presentación de los datos en la vista sin alterar su valor real en el código. Imagina que tienes un valor numérico en tu aplicación, como el número uno, pero deseas mostrarlo como "1€" en pantalla. Utilizando un filtro, puedes lograr esta conversión visual dejando que el valor original siga siendo el mismo, asegurando que los cálculos y manipulaciones de datos no se vean afectados.

Los filtros son especialmente valiosos cuando el valor que necesitas mostrar es diferente al que necesitas para realizar operaciones lógicas como cálculos matemáticos. Así, mientras conservas los números para sumar o restar, puedes presentarlos con formato, como añadir comas, puntos o símbolos monetarios para mejorar la legibilidad en la interfaz del usuario.

¿Cómo se instalan y utilizan los filtros en Vue.js?

Los filtros, al igual que los componentes y las directivas, pueden ser instalados de manera global o local. Si planeas utilizar un filtro varias veces a lo largo de la aplicación, la instalación global es la opción más eficiente.

Paso a paso: Creación de un filtro global

  1. Creación del archivo de filtro

    Aplicaremos un filtro para convertir la duración de canciones de milisegundos a minutos. Para empezar, crea una carpeta llamada filters dentro de tu directorio src y dentro de ella, un archivo JavaScript que podría llamarse MS2M.js.

  2. Definición del filtro

    Este archivo contendrá nuestro filtro. Primero, definimos un objeto filter o MS2M que incluirá una función de instalación global:

    const MS2M = {};
    
    MS2M.install = function(Vue) {
        Vue.filter('MS2MM', (val) => {
            return convertMsToMM(val); // Convertir milisegundos a minutos
        });
    }
    
    export default MS2M;
    
  3. Función de conversión

    Define la función convertMsToMM(val) que realice la conversión de tiempo:

    function convertMsToMM(milliseconds) {
        const minutes = Math.floor(milliseconds / 60000);
        const seconds = ((milliseconds % 60000) / 1000).toFixed(0);
        return minutes + ":" + (seconds < 10 ? "0" : "") + seconds;
    }
    
  4. Instalación del filtro en Vue

    En tu archivo principal main.js, importa y usa el filtro:

    import MS2M from '@filters/MS2M';
    Vue.use(MS2M);
    

Aplicación del filtro en los componentes

Una vez instalado globalmente, puedes usar el filtro en cualquier parte de tu aplicación. Para aplicarlo, simplemente utilizas el operador |, conocido como "pipe", dentro de una expresión Vue:

<span>{{ duration_ms | MS2MM }}</span>

¿Por qué Vue.js ya no incluye filtros nativos?

En las versiones más recientes de Vue.js, se ha eliminado el soporte para filtros nativos debido a la creciente capacidad de manejar expresiones directamente en las plantillas de Vue. Esto permite que los desarrolladores escriban funciones más robustas y personalizadas sin comprometer el rendimiento y funcionalidad. A pesar de esto, la creación e implementación de filtros personalizados sigue siendo una práctica común y efectiva para formatear los datos de la manera que mejor se adapte a tus necesidades de interfaz.

¡Sigue explorando y experimentando con Vue.js! La capacidad de personalizar y manipular datos visualmente sin afectar su integridad es solo una de las muchas ventajas que te ofrece este potente framework.