- Aprender
-
Ecosistema
Ayuda
Herramientas
Librerías Oficiales
Noticias
Lista de Recursos
- Equipo
- Apoyar Vue
- Traducciones
Guía
Conocimientos Esenciales
- Instalación
- Introducción
- La instancia Vue
- Sintaxis de Template
- Propiedades Computadas y Observadores
- Enlace Clases y Estilos
- Renderización Condicional
- Renderizado de lista
- Manejo de eventos
- Binding en Formularios
- Conceptos Básicos de Componentes
Transiciones & Animaciones
- Efectos de Transición
Componentes en Profundidad
- Registro de Componente
- Propiedades
- Eventos personalizados
- Slots
- Componentes Dinámicos & Asíncronos
- Handling Edge Cases
- Transiciones de estado
Reusabilidad & Composición
- Mixins
- Directivas Personalizadas
- Funciones de renderizado & JSX
- Plugins
- Filtros
- Publicación en Producción
Herramientas
- Componentes de un Solo Archivo (Single File Components)
- Testing Unitario
- Soporte TypeScript
Escalando la Aplicación
- Enrutamiento
- Administración del Estado
- Renderizado del lado de Servidor
Funcionamiento Interno
- Reactividad en profundidad
Migraciones
- Migración desde Vue 1.x
- Migración desde Vue Router 0.7.x
- Migración de Vuex 0.6.x a 1.0
Meta Documentación
- Comparación con otros frameworks
- Únete a la comunidad Vue.js!
- Conozca al equipo
Renderización Condicional
v-if
En los string templates, como por ejemplo, Handlebars, escribiríamos un bloque condicional como este:
<!-- template de Handlebars --> |
En Vue, usamos la directiva v-if
para lograr lo mismo:
<h1 v-if="ok">Sí</h1> |
También es posible agregar un “bloque else“ con v-else
:
<h1 v-if="ok">Sí</h1> |
Grupos Condicionales con v-if
en <template>
Debido a que v-if
es una directiva, debe adjuntarse a un solo elemento. Pero, ¿y si queremos cambiar más de un elemento? En este caso, podemos usar v-if
en un elemento<template>
, que sirve como un envoltorio invisible. El resultado final procesado no incluirá el elemento <template>
.
<template v-if="ok"> |
v-else
Puede usar la directiva v-else
para indicar un “bloque else“ para v-if
:
<div v-if="Math.random() > 0.5"> |
Un elemento v-else
debe seguir inmediatamente a un elemento v-if
o v-else-if
, de lo contrario, no será reconocido.
v-else-if
Nuevo en 2.1.0+
El v-else-if
, como su nombre lo indica, sirve como “bloque else if“ para v-if
. También puede ser encadenado varias veces:
<div v-if="type === 'A'"> |
Similar a v-else
, un elementov-else-if
debe seguir inmediatamente a un elemento v-if
o v-else-if
.
Controlando Elementos Reutilizables con key
Vue intenta representar los elementos de la manera más eficiente posible, a menudo reutilizándolos en lugar de renderizarlos desde cero. Más allá de ayudar a hacer Vue muy rápido, esto puede tener algunas ventajas útiles. Por ejemplo, si permite a los usuarios alternar entre varios tipos de inicio de sesión:
<template v-if="loginType === 'username'"> |
Luego, cambiando el loginType
en el código anterior no borrará lo que el usuario ya ha ingresado. Dado que ambos templates utilizan los mismos elementos, el <input>
no se reemplaza, solo su placeholder
.
Compruébelo usted mismo ingresando un texto en la entrada, luego presione el botón para alternar:
Sin embargo, esto no siempre es deseable, por lo que Vue le ofrece una manera de decir: “Estos dos elementos están completamente separados, no los reutilice”. Agregue un atributo key
con valores únicos:
<template v-if="loginType === 'username'"> |
Ahora estas entradas se procesarán desde cero cada vez que presione alternar. Ver por ti mismo:
Observe que los elementos <label>
son todavía reutilizables, porque no tienen atributos key
.
v-show
Otra opción para mostrar un elemento condicionalmente es la directiva v-show
. La utlización es basicamente la mismo:
<h1 v-show="ok">Hola!</h1> |
La diferencia es que un elemento con v-show
siempre se renderizará y permanecerá en el DOM; v-show
simplemente alterna la propiedad CSS display
del elemento.
Observe que el uso de v-show
no es compatible con elementos <template>
, ni tampoco funciona con v-else
.
v-if
vs v-show
v-if
es una renderización condicional “real” ya que garantiza que los eventos y componentes secundarios dentro del bloque condicional sean debidamente destruidos y recreados durante la alternancia.
v-if
también es lazy: si la condición es falsa en la representación inicial, no se hará nada. El bloque condicional no se procesará hasta que la condición se convierta en true por primera vez.
En comparación, v-show
es mucho más simple: el elemento siempre se representa independientemente de la condición inicial, con alternancia basada en CSS.
En general, v-if
tiene costos de alternancia más altos, mientras quev-show
tiene costos de renderización iniciales más altos. Por lo tanto, prefiera v-show
si necesita cambiar algo muy a menudo, y prefierav-if
si es poco probable que la condición cambie en el tiempo de ejecución.
v-if
con v-for
Usando v-if
y v-for
juntos no es recomendado. Vea la guía de estilo para mayor información.
Cuando es utilizado junto con v-for
, este tiene una prioridad más alta que v-if
. Consulte la guía de renderización de listas para obtener más información.