Saltar al contenido

Renderizado Condicional

v-if

La directiva v-if se utiliza para renderizar un bloque condicionalmente. El bloque solo se renderizará si la expresión de la directiva devuelve un valor verdadero (truthy).

template
<h1 v-if="awesome">¡Vue es fabuloso!</h1>

v-else

Puedes usar la directiva v-else para indicar un "bloque else" para v-if:

template
<button @click="awesome = !awesome">Toggle</button>

<h1 v-if="awesome">¡Vue es fabuloso!</h1>
<h1 v-else>Oh no 😢</h1>

¡Vue es fabuloso!

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

v-else-if, como su nombre indica, sirve como un "bloque else if" para v-if. También se puede encadenar varias veces:

template
<div v-if="type === 'A'">
  A
</div>
<div v-else-if="type === 'B'">
  B
</div>
<div v-else-if="type === 'C'">
  C
</div>
<div v-else>
  No A/B/C
</div>

Similar a v-else, un elemento v-else-if debe seguir inmediatamente a un elemento v-if o v-else-if.

v-if en <template>

Debido a que v-if es una directiva, debe adjuntarse a un solo elemento. Pero, ¿qué pasa si queremos alternar 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 renderizado no incluirá el elemento <template>.

template
<template v-if="ok">
  <h1>Título</h1>
  <p>Párrafo 1</p>
  <p>Párrafo 2</p>
</template>

v-else y v-else-if también se pueden usar en <template>.

v-show

Otra opción para mostrar condicionalmente un elemento es la directiva v-show. El uso es en gran medida el mismo:

template
<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 solo alterna la propiedad CSS display del elemento.

v-show no soporta el elemento <template>, ni funciona con v-else.

v-if vs. v-show

v-if es un renderizado condicional "real" porque asegura que los listeners de eventos y los componentes hijos dentro del bloque condicional sean correctamente destruidos y recreados durante las alternancias.

v-if también es perezoso: si la condición es falsa en el renderizado inicial, no hará nada; el bloque condicional no se renderizará hasta que la condición se vuelva verdadera por primera vez.

En comparación, v-show es mucho más simple: el elemento siempre se renderiza independientemente de la condición inicial, con alternancia basada en CSS.

En términos generales, v-if tiene mayores costos de alternancia mientras que v-show tiene mayores costos de renderizado inicial. Por lo tanto, prefiere v-show si necesitas alternar algo muy a menudo, y prefiere v-if si es poco probable que la condición cambie en tiempo de ejecución.

v-if con v-for

Cuando v-if y v-for se usan ambos en el mismo elemento, v-if se evaluará primero. Consulta la guía de renderizado de listas para más detalles.

Nota

No se recomienda usar v-if y v-for en el mismo elemento debido a la precedencia implícita. Consulta la guía de renderizado de listas para más detalles.

Renderizado Condicional
CYBER MONDAY
Get Official Certification for 60% OFF
Get Certified
00
hours
:
16
minutes
: