Przejdź bezpośrednio do treści

Renderowanie warunkowe

v-if

Dyrektywa v-if jest używana do warunkowego renderowania bloku. Blok będzie renderowany tylko wtedy, gdy wyrażenie dyrektywy zwróci wartość prawdziwą.

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

v-else

Można użyć dyrektywy v-else, aby wskazać blok "else" dla v-if:

template
<button @click="awesome = !awesome">Przełącz</button>

<h1 v-if="awesome">Vue jest niesamowite!</h1>
<h1 v-else>O nie 😢</h1>

Vue jest niesamowite!

Element v-else musi natychmiast po v-if lub v-else-if - w przeciwnym razie nie zostanie rozpoznany.

v-else-if

v-else-if, jak sama nazwa wskazuje, pełni rolę bloku "else if" dla v-if. Może być również dołączne wielokrotnie:

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>

Podobnie jak v-else, element v-else-if musi pojawić się natychmiast po v-if lub v-else-if.

v-if w <template>

Ponieważ v-if jest dyrektywą, musi być przypisane do pojedynczego elementu. Ale co w przypadku kiedy chcemy przełączać więcej niż jeden element? W takim przypadku możemy użyć v-if na elemencie <template>, który służy jako niewidoczny kontener. Końcowy wynik renderowania nie będzie zawierał elementu <template>.

template
<template v-if="ok">
  <h1>Tytuł</h1>
  <p>Paragraf 1</p>
  <p>Paragraf 2</p>
</template>

v-else i v-else-if mogą być również używane w <template>.

v-show

Inną opcją warunkowego wyświetlania elementu jest dyrektywa v-show. Użycie jest zasadniczo takie samo:

template
<h1 v-show="ok">Cześć!</h1>

Różnica polega na tym, że element z v-show będzie zawsze renderowany i pozostanie w DOM; v-show tylko przełącza właściwość CSS display elementu.

v-show nie obsługuje elementu <template>, ani nie działa z v-else.

v-if vs. v-show

v-if to "prawdziwe" renderowanie warunkowe, ponieważ zapewnia, że nasłuchiwacze zdarzeń i komponenty potomne w bloku warunkowym są odpowiednio niszczone i ponownie tworzone podczas przełączania.

v-if jest również lazy: jeśli warunek jest fałszywy podczas początkowego renderowania, nie zrobi nic - blok warunkowy nie zostanie wyrenderowany, dopóki warunek nie stanie się prawdziwy po raz pierwszy.

W porównaniu, v-show jest o wiele prostsze - element jest zawsze renderowany, niezależnie od początkowego warunku, z przełączaniem oparte na CSS.

Ogólnie rzecz biorąc, v-if ma wyższe koszty przełączania, podczas gdy v-show ma wyższe koszty początkowego renderowania. Wybieraj zatem v-show, jeśli musisz przełączać coś bardzo często, a v-if, jeśli mało prawdopodobne jest, aby warunek zmienił się w czasie wykonywania.

v-if z v-for

Kiedy v-if i v-for są używane w tym samym elemencie, v-if zostanie wzięte pod uwagę pierwsze. Zobacz przewodnik renderowania list, żeby poznać szczegóły.

Note

Nie zaleca się używania v-if i v-for na tym samym elemencie ze względu na niejawne pierwszeństwo. Więcej szczegółów można znaleźć w przewodniku renderowania listy.

Renderowanie warunkoweJest załadowany