Introducción

1

Sistema de Componentes en Viu: Creación de Proyectos Reales

2

Vue.js: Fundamentos y Aplicaciones Prácticas

3

Curso Rápido: Desarrollar Apps Reactivas con Vue.js

Rendering Declarativo y Manipulación de DOM

4

Renderizado Declarativo en JavaScript: Estado y Vista Sincronizados

5

Expresiones JavaScript en Propiedades de Componentes Web

6

Manipulación de Atributos HTML Dinámicos con Vue.js

7

Renderizado condicional en Vue.js: Directivas v-if y v-show

8

Renderizado de Listas con v-for en Vue.js

9

Eventos en Vue.js: Uso de v-on para Interactividad Dinámica

10

Manejo de Clases CSS Dinámicas con Vue.js

11

Estilos CSS Dinámicos con JavaScript: Fondo y Modo Oscuro

12

Propiedades Computadas en JavaScript: Uso Práctico y Ejemplos

13

Propiedades Computadas en Vue.js: Manipulación de Datos Dinámica

14

Desarrollo de un Tracker de Cursos con Vue.js

Sistema de Componentes

15

Componentes HTML: Arquitectura y Reutilización Eficiente

16

Creación de Componentes en Vue: Paso a Paso

17

Comunicación entre Componentes en Vue.js: Props y Eventos

18

Comunicación entre Componentes en Vue: Props y Eventos

19

Componentes Slot en Vue.js: Inyectar HTML Dinámico

20

Ciclo de vida de componentes en Vue.js

21

Componentes de Vue.js: Ciclo de Vida y Comunicación

22

Componente sofisticado en Vue: Creación y gestión de modales

Ambiente de Desarrollo

23

Desarrollo de Aplicaciones Web con Vue.js y Herramientas de Debugging

24

Generación de proyectos con CLI de Vue.js

25

Componentes Vue SFC: Estructura y Uso Práctico

26

Automatización de proyectos con CLI y npm

Platzi Exchange

27

Instalación y uso de Tailwind CSS en proyectos web

28

Componentes en Vue: creación e integración práctica

29

Rutas Dinámicas con Vue: Configuración y Uso del Vue Router

30

Uso de Fetch API para Consultar Criptomonedas en JavaScript

31

Filtros y Directivas en Vue.js para Mejorar UI de Tablas

32

Rutas Dinámicas en Vue.js: Gestión de URLs y Parámetros

33

Navegación en Vue.js: Uso de Router Link y Métodos Programáticos

34

Uso de Componentes de Terceros en Proyectos Vue.js

35

Solución a Problemas de Reactividad en Vue.js

36

Filtros y Ordenamiento en Tablas con Vue.js

37

Rutas Dinámicas y Conversores en Vue.js

¡A producción!

38

Uso de Git y GitHub para Desplegar Aplicaciones Web

Rendering Declarativo y Manipulacion de DOM

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Filtros y Directivas en Vue.js para Mejorar UI de Tablas

31/38
Recursos

¿Qué son los filtros en programación?

Los filtros en programación son una herramienta útil que nos permite cambiar la forma en la que se muestra el valor de una propiedad en pantalla, sin alterar su valor original en el código. Imagina que deseas mostrar un precio como moneda o un porcentaje en una interfaz de usuario más amigable; los filtros son la solución ideal para este propósito. Este enfoque es fundamental en desarrollo web, pues mejora significativamente la experiencia del usuario al visualizar datos.

¿Cómo se implementan los filtros en JavaScript?

Los filtros se implementan mediante funciones que reciben un valor, lo transforman y regresan un nuevo valor formateado. En JavaScript, se pueden crear filtros personalizados para valores numéricos usando librerías especializadas como numeral.js. Aquí te mostramos cómo puedes comenzar:

  1. Instalar la librería numeral: Esto se hace a través de npm, el gestor de paquetes de JavaScript, para poder formatear números en diferentes tipos de características.

    npm install numeral
    
  2. Crear una función de filtro: Dentro de un archivo de filtros, crea una función que formatee los valores según sea necesario; por ejemplo, para mostrar valores como moneda o porcentaje.

    import numeral from 'numeral';
    
    function dollarFilter(value) {
        if (!value) {
            return '$0.00';
        }
        return numeral(value).format('$0,0.00');
    }
    
    export { dollarFilter };
    
  3. Registrar el filtro en tu aplicación: Esto se logra importando la función y registrándola dentro de tu framework, como Vue.js, para que esté disponible a través de toda tu aplicación.

    import { dollarFilter } from './filters';
    
    Vue.filter('dollar', dollarFilter);
    

¿Cómo aplicar los filtros en una interfaz de usuario?

Una vez que hayas registrado tus filtros, el proceso de aplicarlos es bastante sencillo. Aquí te detallo el proceso:

  • Usar el filtro en la vista: En tu archivo de plantilla, utiliza el filtro con la sintaxis de tuberías | seguido del nombre del filtro. Esto transformará el valor para mostrarlo formateado.

    <span>{{ precio | dollar }}</span> <!-- Muestra el precio formateado -->
    
  • Agregar filtros adicionales: Si necesitas formatear otros tipos de datos, sigue el mismo procedimiento para crear, exportar e importar funciones de filtro adicionales, como para porcentajes:

    function percentFilter(value) {
        if (!value) {
            return '0%';
        }
        return `${parseFloat(value).toFixed(2)}%`;
    }
    
    export { percentFilter };
    

    Y luego, registrarlo:

    Vue.filter('percent', percentFilter);
    

¿Cómo mejorar la interfaz con directivas y clases?

Además de los filtros, se pueden utilizar directivas y clases para mejorar la presentación de los datos. En particular, se pueden cambiar estilos como colores y tamaños, basándose en condiciones específicas. Aquí te mostramos cómo:

  • Modificar clases según condiciones: Usa la directiva v-bind para cambiar clases basándote en condiciones evaluadas dinámicamente.

    <span :class="{ 'text-red-600': value < 0, 'text-green-600': value >= 0 }">
        {{ cambioPorcentual | percent }}
    </span>
    
  • Adaptar tamaños de imágenes y otros elementos: Usa clases CSS predefinidas o personalizadas para mantener la coherencia en la interfaz.

    <img :src="imageSrc" class="w-6 h-6">
    

Este conjunto de técnicas no solo ayuda en la presentación de los datos, sino que también facilitan la comprensión al usuario final, creando una experiencia más intuitiva y atractiva. A medida que avanzas en el desarrollo web, la combinación de filtros con directivas y clases te permitirá construir interfaces poderosas y efectivas.

Aportes 47

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Pana el hecho de que te tomes el tiempo para responder las dudas de los estudiantes, dejar links a artìculos para complementar la enseñanza sobre las dudas que respondes y demás deja muy bien parado éste curso;
Lo voy a recomendar mucho, hasta ahora muy completo!
Saludos!

Compañeros, si están usando la versión 3 de Vue tendrán problemas al usar filter ya que este fue removido de esta versión.
Por lo tanto no funcionará que en el archivo main.js usen la función ’filter’ ya que esta dejo de ser soportada.

Pero a pesar de eso, aún podemos tener los mismos resultados que se muestran en esta clase.
Eso sí, hay algunas cosas que se hacen diferentes.

–> Veamos paso a paso lo que hay que hacer <–
PRIMERO
> Ya no haremos uso del archivo main.js, por lo que este archivo no hay que modificarlo. Se deja tal como lo tenían.
SEGUNDO
> Tal como se muestra en esta clase deben crear el archivo filters.js en su directorio ’src’ y agregarle el mismo contenido que pone el profesor.
Incluso usando la librería numeral que descargaron al comienzo de la clase por ‘npm’.
TERCERO
> Ahora estando en el archivo PxAssetsTable.vue veremos varias diferencias, ya que es aquí donde simulamos el mismo efecto que tenía la función filter de la versión 2.x de Vue.

> Comencemos viendo como queda la sección <script> de nuestro archivo:
- PxAssetsTable.vue -

> Si observan es aquí donde hacemos la importación de nuestras funciones que creamos en el archivo filters.js.
> Ahora para acceder a estas funciones debemos usar, dentro de nuestro bloque ‘export default’, la función setup().
Usando setup() retornaremos las funciones que importamos de nuestro archivo filters.js.
Solo así podremos hacer uso de estas funciones, nuestros “filtros”, dentro de nuestra sección <template>.

> Por lo que veamos ahora como podemos aplicar estás funciones de filters.js en los datos de nuestra tabla.
Vayamos a la sección <template> de nuestro archivo:
- PxAssetsTable.vue -


> Para la columna ’Precio’ y ’Cap. de Mercado’, al igual que en la clase, le aplicamos la función dollarFilter().
> Y para nuestra columan ‘Variación 24hs’ le aplicamos la función percentFilter().
> Es de esta forma entonces como usamos nuestras funciones de nuestro archivo ‘filters.js’.
Hacemos un simple llamado de la función y le pasamos el parametro que espera. <

------------------------

Y bueno, a pesar de ya no poder usar la función ‘filter’, de esta forma podemos tener los mismos resultados que vimos en esta clase.
Espero les sirva 😄, saludos a todos!!

Dos cosas me sorprenden de este curso:

  1. Vue es muy intuitivo. Seguramente el laburo del día a día incremente su complejidad pero los fundamentos son fáciles de comprender e iterar sobre ellos.
  2. Nacho explica muy bien y está pendiente de los estudiantes. Veo muchos comentarios suyos aportando más valor 👏👏👏

LOS FILTROS EN VUE 3 YA NO EXISTEN

Según su documentación oficial los filtros dentro de VueJS dejaron de existir, en su lugar reecomiendan usar propiedades computadas o métodos.

Aquí les dejo el código para que puedan simular el uso de filtros siguiendo la documentación de Vue, el archivo main.js ya no se toca, ahí ya no hacemos nada, pero en el componente PxAssetsTable.vue hay que agregar importar dollarFilter y hay que agregar el método, que en este caso lo llame dollar para simular el filtro de la clase, el cual va a devolver lo que la función dollarFilter devuelva:

import { dollarFilter } from "@/filters";

export default {
  name: "PxAssetsTable",

  props: {
    assets: {
      type: Array,
      default: () => []
    }
  },

  methods: {

    dollar(value) {
      return dollarFilter(value);
    }

  }

};

Y simplemente en el template lo usamos como un método normal:

<td>{{ dollar(a.priceUsd) }}</td>

Nacho hasta esta clase caigo en cuenta lo bien estructurado que está este curso. Felicidades.

Primero dar una pasada por los componentes básicos y luego ir agregando casos reales con un proyecto productivo te va llevando mucho más rápido por los conceptos que necesitas en el día a día.

Cada vez amo más vue.js XD

Los filtros los estuve buscando una vez para mi trabajo y nunca entendi como implementarlos, ahora veo todo con claridad, muchas gracias!!!

Otra manera de evaluar el valor para dar color al porcentaje sería verificando si el número es mayor o menor a 0.

<td :class="asset.changePercent24Hr > 0 ? 'text-green-600' : 'text-red-600'">
	{{ asset.changePercent24Hr | percent }}
</td>

Otra manera de hacer la validación del color:

        <td
          :class="
            parseFloat(a.changePercent24Hr) < 0.0
              ? 'text-red-600'
              : 'text-green-600'
          "
        >
          {{ a.changePercent24Hr | percent }}
        </td>

la equivalencia más cercana que puedo ubicar, son los pipes para Angular… 🤔

Si como yo están en Vue 3 los códigos son los siguientes:

filter.js

import numeral from 'numeral'

const filters  =  {
  DollarFilter: value =>   
    value ? numeral(value).format('($ 0.00a)') : '$ 0'
}

export default filters 

en main.js se declara así:

import  { createApp } from "vue";
import filters from "@/filters";

const app = createApp(App).use(router)
app.config.globalProperties.$filters = filters
app.mount("#app");

y se declara en el td así:

	<td>
          {{ $filters.DollarFilter(a.priceUsd) }}
        </td>

Si alguno de ustedes está haciendo el curso con Vue 3, la funcionalidad de filters ha sido removida.

Si quieren saber cómo manejar esta funcionalidad en esta versión podría revisar el siguiente link

El sitio web de NumeralJS: http://numeraljs.com/

Hola pueden escribir sus filtors también con ternarios para hacerlos un poco menos verbosos

//filters.js
import numeral from 'numeral'

const dollarFilter = function(value) {
   return value ? numeral(value).format('($ 0.00a') : '$ 0'
}

const percentFilter = function(value) {
   return value ? `${Number(value).toFixed(2)}%` : '0%'
}

export { dollarFilter, percentFilter } 

Otra forma podria ser asi despues de todo lo que hemos visto. 😃

<td :class="a.changePercent24Hr < 0 ? 'text-red-600' : 'text-green-600'">

Curioso ver aqui el precio del BTC en los 8k… actualmente 55K … caramba hombre, q negocio me perdi xD

HOY BTC 59K

Una forma más moderna de escribir filters.js:

import numeral from "numeral";

const dollarFilter = (value) => {
  return !value ? "$ 0" : numeral(value).format("($ 0.00a)");
};

const percentFilter = (value) => {
  return !value ? "0%" : `${Number(value).toFixed(2)}%`;
};

export { dollarFilter, percentFilter };

ejemplo seria como un pipe si fuese Angular ¿?

Si estas usando Vue3:
In 3.x, filters are removed and no longer supported. Instead, we recommend replacing them with method calls or computed properties.

Esto de los filtros es muy parecido a los pipes de Angular, sin embargo los de Vue me gustan más!

Vue.js le permite definir filtros que pueden usarse para aplicar formato de texto común. Se puede utilizar filtros en dos lugares: interpolaciones mustache y expresiones v-bind. Los filtros se deben agregar al final de la expresión de JavaScript, denotados por símbolo “pipe”:

<!-- en mustaches -->
{{ message | capitalize }}

<!-- en v-bind -->
<div v-bind:id="rawId | formatId"></div>

main.js

import { createApp } from “vue”;
import App from “./App.vue”;
import “@/assets/css/tailwind.css”;
import router from “@/router.js”;
import { dollarFilter } from “@/filters.js”

const app = createApp(App)
.use(router)

app.config.globalProperties.$filters = {
dollarFilter
}

app.mount("#app");

PxAssetsTable

{{ $filters.dollarFilter(asset.priceUsd) }}

Este es el unico cambio para que quede de maneta global

La funcionalidad de los filters ha quedado deprecada. El equipo de Vue.js recomienda usar metodos o propiedades computadas para el uso de los mismos.
.
https://v3.vuejs.org/guide/migration/filters.html#overview

Que mágico:)

Por si a alguien no le funciona la librería, pueden hacerlo de esta forma, no es lo idea, y no tiene que ver con el tema, pero soluciona el problema:

para los dos primeros:

            <td>$ {{ Math.round(a.priceUsd * 100) / 100 }}</td>
            <td>$ {{ Math.round(a.marketCapUsd * 100) / 100 }}</td>

para el ultimo valor:

        methods: {
            percentFilter(value){
                if (!value) {
                    return 0;
                }
                return `${Number(value).toFixed(2)}%`
            }
        }

<td :class="a.changePercent24Hr.includes('-') ? 'text-red-600' : 'text-green-500'">
                {{ percentFilter(a.changePercent24Hr) }}
</td>

Podemos exportar directamente al crear la función

import numeral from "numeral"

export const dollarFilter = (value) => {
    if(!value) return "$ 0"
    return numeral(value).format(("$ 0.00a"))
}

export const percentFilter = (value) => {
    if(!value) return "0%"
    return `${Number(value).toFixed(2)}%`
}

Este es el doc de vue 2 donde se explica los filtros https://vuejs.org/v2/guide/filters.html

Támbien Podemos usar Intl.NumberFormat de JavaScript.

<td>{{ new Intl.NumberFormat("es-CO").format(a.priceUsd) }}</td>
  1. instalar libreria-> npm i -S numeral
  2. crear filter.js
import numeral from 'numeral'

const dollarFilter = function(value) {
  if (!value) {
    return '$ 0'
  }

  return numeral(value).format('($ 0.00a)')
}

const percentFilter = function(value) {
  if (!value) {
    return '0%'
  }

  return `${Number(value).toFixed(2)}%`
}

export { dollarFilter, percentFilter }

3.en main js

import { dollarFilter, percentFilter } from '@/filters'

Vue.filter('dollar', dollarFilter)
Vue.filter('percent', percentFilter)

4.hacer uso en PxAssetsTable.vue

<td>{{ a.priceUsd | dollar }}</td>
        <td>{{ a.marketCapUsd | dollar }}</td>
{{ a.changePercent24Hr | percent }}

con los filtros mi valor incial se manteniene igual

no entendi muy bien por que pones export defauld y tampoco por que cuando importas al archivo main.js en el import lo pones con llaves {dollarFilter}

<v-content>
  <router-view/>
</v-content>

Filtros:

Utilidad de Vue.js que nos permite modificar el valor de la vista de una propiedad sin modificar el valor de la propiedad.
Permite formatear algún valor para mostrar en la interfaz de usuario.

una pregunta por que la funcion que retornaba la API la exportabas con export default y al filtro con export? cual es la diferencia?

casi dormido

export default {
  name: "PxAssetsTable",
  methods:{
    getClassName(value)
    {
      let className = "";
      
      if(value > 0)
      {
        className = "text-success";
      }
      else if (value < 0)
      {
        className = "text-danger";
      } 
      else
      {
        className = "text-dark";
      }

      return className;
    }
  },
  props: {
    assets: {
      type: Array,
      default: () => []
    }
  }
};

la magia de prettier

Filtros: Son una utilidad que nos da Vue con la que podemos modificar el valor de una vista de una propiedad sin modificar el valor de la propiedad, es decir, dentro de la aplicación el valor de la propiedad no va a cambiar pero al momento de mostrarse en pantalla va a tener una adaptación a ese valor según el formato que se le quiera dar.

Estoy haciendo este curso en marzo del 2021, los resultados que arroja el Cap. de mercado a esta fecha en el bitcoin se ha multiplicado enormemente! Los invito a tomar los cursos de trading, no tienen desperdicio!

y pensar que ahora el bitcoin esta en 51k 😐

La función includes me pareció bastante interesante !!

👌

Wow. La forma de programar en Vue es muy intuitiva. Estoy chocando un poco porque ya mi mente está demasiado adaptada a React, pero me ha parecido fascinante este framework ❤️

Me llama la atencion que al final se haya decidido utilizar includes() para identificar si le numero es negativo, tratandolo como string.
Segun veo changePercent24Hr es numerico y es posible solo checar si es mayor que cero para determinar el color:

<td :class="c.changePercent24Hr > 0 ? 'text-green-600' : 'text-red-600'">
          {{c.changePercent24Hr | percent}}
        </td>