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.