Skip to content

Renderizado Condicional

v-if

La directiva v-if se utiliza para renderizar condicionalmente un bloque. El bloque sólo se renderizará si la expresión de la directiva retorna un valor verdadero.

template
<h1 v-if="awesome" >¡Vue es increíble!</h1>

v-else

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

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

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

¡Vue es increíble!

Un elemento v-else debe seguir inmediatamente a un elemento v-if o a un elemento v-else-if; de lo contrario no será reconocido.

v-else-if

El elemento v-else-if, como su nombre indica, sirve como un "bloque else if" para v-if. También se puede encadenar múltiples 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>

Al igual que v-else, un elemento v-else-if debe seguir inmediatamente a un elemento v-if o v-else-if.

v-if en <template>

Como v-if es una directiva, tiene que estar unida 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 sirva de envoltura invisible. El resultado final del 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 pueden ser usados en la <template>.

v-show

Otra opción para mostrar condicionalmente un elemento es la directiva v-show. El uso es prácticamente 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 sólo conmuta 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 una renderización condicional "real" porque asegura que los escuchadores de eventos y los componentes hijos dentro del bloque condicional sean destruidos y se vuelvan a crear correctamente durante los toggles.

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 convierta en verdadera por primera vez.

En comparación, v-show es mucho más simple: el elemento siempre es renderizado sin considerar la condición inicial, con una alternancia basada en CSS.

En general, v-if tiene mayores costes de conmutación mientras que v-show tiene mayores costes de renderizado inicial. Así que prefiera v-show si necesita alternar algo muy a menudo, y prefiera v-if si es poco probable que la condición cambie en tiempo de ejecución.

v-if con v-for

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 estilo para más detalles.

Cuando se utilizan v-if y v-for en el mismo elemento, se evaluará primero v-if. Para más detalles, consulta la guía de renderizado de listas.

Renderizado Condicional has loaded