Skip to content

Renderowanie warunkowe (Conditional Rendering)

v-if

Dyrektywa v-if jest używana do warunkowego renderowania bloku. Blok zostanie wyrenderowany tylko wtedy, gdy wyrażenie dyrektywy zwróci wartość true.

template
<h1 v-if="awesome">Vue jest wspaniałe!</h1>

v-else

Dyrektywy v-else można użyć do wskazania "bloku else" dla v-if:

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

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

Vue jest wspaniłe!

Element v-else musi występować bezpośrednio po elemencie v-if lub v-else-if - w przeciwnym razie nie zostanie rozpoznany.

v-else-if

v-else-if, jak sama nazwa wskazuje, służy jako "blok else if " dla v-if. Można go również łączyć łańcuchowo wiele razy:

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 do v-else, element v-else-if musi następować bezpośrednio po elemencie v-if lub v-else-if.

v-if w <template>

Ponieważ v-if jest dyrektywą, musi być dołączona do pojedynczego elementu. Ale co zrobić, jeśli 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 niewidzialna osłona. Końcowy wynik renderowania nie będzie zawierał elementu <template>.

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

v-else i v-else-if mogą być także użyte na <template>.

v-show

Inną możliwością warunkowego wyświetlenia elementu jest dyrektywa v-show. Sposób użycia jest w dużej mierze taki sam:

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

Różnica polega na tym, że element z v-show zawsze będzie 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 współpracuje z v-else.

v-if vs v-show

v-if jest "prawdziwym" renderowaniem warunkowym, ponieważ gwarantuje, że event listeners i komponenty potomne wewnątrz bloku warunkowego są poprawnie usuwane i ponownie tworzone podczas przełączania.

v-if jest również lazy: jeśli warunek jest fałszywy przy pierwszym renderowaniu, to nie zrobi nic - blok warunkowy nie zostanie wyrenderowany, dopóki warunek nie stanie się prawdziwy po raz pierwszy.

Dla porównania, v-show jest znacznie prostsze - element jest zawsze renderowany niezależnie od stanu początkowego, z przełączaniem opartym na CSS.

Ogólnie rzecz biorąc, v-if ma wyższe nakłady podczas przełączeń, podczas gdy v-show ma wyższe początkowe nakłady renderowania. Tak więc wybierz v-show jeśli musisz przełączać coś bardzo często, natomiast wybierz v-if jeśli stan rzadko się zmienia w czasie działania.

v-if z v-for

Note

Nie jest zalecane używanie v-if i v-for na tym samym elemencie z powodu ukrytego priorytetu. Zobacz Przewodnik -style by dowiedzić się szczegółów.

Gdy v-if i v-for są użyte na tym samym elemencie, v-if zostanie obliczone jako pierwsze. Zobacz. przewodnik - renderowanie list by dowiedzić się szczegółów.

Renderowanie warunkowe (Conditional Rendering) has loaded