Filtros en Vue: conversión milisegundos a minutos
Clase 35 de 53 • Curso Profesional de Vue.js 2
Contenido del curso
CLI y Dev Tools
- 3

Instalación de Vue.js: Node, Dev Tools y CLI
06:13 min - 4

Crear una aplicación Vue con CLI y webpack
12:49 min - 5

Cómo funciona webpack.config.js
10:38 min - 6

Babel: transpilador de JavaScript moderno
05:06 min - 7

ESLint con Standard JS: linteo automático en webpack
15:34 min - 8

Configuración de Sass y Bulma en Vue
06:18 min - 9

Cómo configurar Pug en Vue con webpack
04:23 min - 10
Diseño de Mockups: Práctica y Colaboración en Comunidad
00:20 min - 11
Creación de Vistas con Mockups y Vue.js
00:32 min
Manipulación del DOM
- 12

Expresiones en Vue: sintaxis doble llave
03:49 min - 13

Diferencia entre v-show y v-if en el DOM
06:22 min - 14

Qué es data binding en Vue.js
04:11 min - 15

Computed properties en Vue.js: cómo crearlas
04:13 min - 16

Qué son los watchers de Vue
02:25 min - 17

Eventos Vue: directiva v-on y métodos format
06:12 min - 18

Cómo construir una interfaz de búsqueda completa en Vue
19:03 min - 19
Manipulación del DOM con Vue.js: Práctica y Ejercicios
03:00 min
REST y HTTP
Sistema de Componentes
- 23

Cómo crear componentes en Vue
08:46 min - 24

Componentes Layout en Vue con Bulma
09:50 min - 25

Reactividad en Vue: $set y Object.assign
06:14 min - 26

Hooks del ciclo de vida en Vue.js
05:38 min - 27

Comunicación padre-hijo con props en Vue
23:27 min - 28

Eventos en Vue: comunicar hijo a padre
12:04 min - 29

Slots: HTML dinámico en componentes Vue
13:42 min - 30

Plugin Event Bus: comunicar componentes sin relación en Vue
19:19 min
Vue Router
Extendiendo VueJS
Clases, Animaciones y Transiciones36
Vuex
- 39

Cómo Vuex centraliza estados en Vue
03:41 min - 40

Instalación de Vuex con estado único
17:32 min - 41

Cómo usar mutations y commit en Vuex
08:16 min - 42

Getters de Vuex: mapGetters y store sincronizado
07:35 min - 43

Cómo dispatch ejecuta actions asincrónicas en ViewX
07:54 min - 44

Instalación de Viewex en Platzi Music
26:37 min
Nuxt.js
Deploy a Producción con Now
Conclusiones
Bonus
Los filtros permiten formatear datos en la vista sin alterar su valor real: claridad para el usuario y precisión en el código. Aquí verás cómo crear e instalar un filtro global que convierte milisegundos a minutos, y cómo aplicarlo con el pipe en expresiones para mostrar duraciones de canciones correctamente.
¿Qué son los filtros y por qué importan?
Los filtros sirven para mostrar un valor formateado sin modificar la propiedad original. Por ejemplo, un número 1 puede verse como “pesos 1” en pantalla mientras el dato interno sigue siendo 1. Esto es clave cuando el código necesita números para calcular, pero la interfaz requiere strings con símbolos o separadores.
- Separan lógica de presentación del dato real.
- Se usan en expresiones y se encadenan con el | pipe.
- Se pueden instalar global o local según el uso.
- La función del filtro debe devolver el valor formateado.
Apunte útil: en versiones antiguas de view había filtros nativos; hoy se trabaja más con expresiones, pero crear filtros personalizados sigue siendo simple.
¿Cómo crear e instalar el filtro global ms2mm?
Crearemos una carpeta /source/filters y el archivo ms2mm.js. Definimos un objeto con install para registrar el filtro de forma global usando view.filter. La función interna recibirá el valor original y retornará el formateado.
Habilidades y keywords que aplicas: - Crear un plugin con función install para instalación global. - Usar una función arrow que recibe el valor original y retorna el formateado. - Convertir tiempo con Math.floor, operador % y toFixed. - Construir la salida con template strings.
// /source/filters/ms2mm.js
function convertMsToMm(ms) {
const minutes = Math.floor(ms / 60000);
const sec = ((ms % 60000) / 1000).toFixed(0);
return `${minutes}:${sec}`; // template string de ES6/2015.
}
const ms2mm = {
install(view) {
view.filter('ms2mm', (val) => convertMsToMm(val));
}
};
export default ms2mm; // export default del objeto filtro.
Ahora lo instalamos de forma global en main.js con use:
// main.js
import ms2mm from '@/filters/ms2mm';
view.use(ms2mm); // similar a cómo se usa el *bus* o el *router*.
Notas prácticas: - Si tu editor marca “variables no usadas”, es un error de estilo que se corrige al integrarlas. - Mantén nombres claros: filtro “ms2mm” y función “convertMsToMm”.
¿Cómo aplicarlo en componentes con pipe y expresiones?
Una vez instalado globalmente, puedes usarlo en cualquier componente. Busca la propiedad que contiene la duración en milisegundos (por ejemplo, duration_ms en track.view o en el componente del player) y aplica el pipe.
- En plantillas, los filtros se usan siempre dentro de expresiones.
- Se aplican con la barra vertical:
|. - El dato original permanece intacto en el estado: solo cambias la representación en pantalla.
<!-- Track (track.view) -->
<span>{{ duration_ms | ms2mm }}</span>
<!-- Player -->
<span>{{ currentTrack.duration_ms | ms2mm }}</span>
Qué observar al probar en el navegador: - La duración se muestra como “minutos:segundos”. - Al inspeccionar el elemento, el valor original sigue en milisegundos. - El filtro se aplica en todos los componentes por estar instalado global.
Habilidades reforzadas: - Aplicar filtros en expresiones con pipe. - Formatear datos para UI sin mutar el estado. - Reuso del filtro en múltiples componentes.
¿Tienes una variación o mejora para este formato de tiempo? Comparte tu idea en los comentarios y cuéntanos cómo lo aplicarías en tu proyecto.