Skip to content

Interpretação Condicional

v-if

A diretiva v-if é usada para interpretar um bloco condicionalmente. O bloco apenas será interpretado se a expressão da diretiva retornar um valor verdadeiro:

template
<h1 v-if="awesome">Vue is awesome!</h1>

v-else

Nós podemos usar a diretiva v-else para indicar um "bloco else" à v-if:

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

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

Vue is awesome!

Um elemento v-else deve seguir imediatamente um elemento v-if ou v-else-if - de outro modo não será reconhecido.

v-else-if

A diretiva v-else-if, como o nome sugere, serve como um "bloco else if" à v-if. Esta também pode ser encadeada várias vezes:

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>
  Not A/B/C
</div>

Semelhante à v-else, um elemento v-else-if deve seguir imediatamente um elemento v-if ou um v-else-if.

v-if no <template>

Uma vez que a v-if é uma diretiva, esta precisa ser atribuída a um único elemento. Porém, e se quiséssemos alternar mais que um elemento? Neste caso podemos usar a v-if sobre um elemento <template>, que serve como um embrulhador invisível. O resultado final interpretado não incluirá o elemento <template>:

template
<template v-if="ok">
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>

A v-else e a v-else-if também podem ser usadas sobre o <template>.

v-show

Uma outra opção para exibir condicionalmente um elemento é a diretiva v-show. O uso é maioritariamente o mesmo:

template
<h1 v-show="ok">Hello!</h1>

A diferença é que um elemento com a v-show sempre será interpretado e permanecerá no DOM; A v-show apenas alterna a propriedade de CSS display do elemento.

A v-show não suporta o elemento <template>, nem funciona com a v-else.

v-if vs v-show

A v-if é a interpretação condicional "verdadeira" porque esta garante que os ouvintes de evento e componentes filhos dentro do bloco condicional sejam destruídos corretamente e recriados durante as alternâncias.

A v-if também é preguiçosa: se a condição for falsa na interpretação inicial, esta não fará nada - o bloco condicional não será interpretado até a condição tornar-se verdadeira pela primeira vez.

Em comparação, a v-show é muito mais simples - o elemento é sempre interpretado independentemente da condição inicial, com alternância baseada em CSS.

Dum modo geral, a v-if tem custos de alternância mais elevados enquanto a v-show tem custos de interpretação inicial mais elevados. Então devemos preferir a v-show se precisarmos de alternar algo com muita frequência, e devemos preferir v-if se for pouco provável que a condição se altere em execução.

v-if com v-for

AVISO

Não é recomendado usar a v-if e v-for sobre o mesmo elemento devido à precedência implícita. Consultar o guia de estilo por detalhes.

Quando a v-if e a v-for forem ambas usadas sobre o mesmo elemento, a v-if será avaliada primeiro. Consultar o guia de interpretação de lista por detalhes.

Interpretação Condicional has loaded