Skip to content

Podmíněné vykreslování

v-if

Direktiva v-if se používá k podmíněnému vykreslení bloku. Blok bude vykreslen pouze v případě, že výraz direktivy vrátí pravdivou hodnotu.

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

v-else

Můžete použít direktivu v-else pro indikaci „else“ bloku k v-if:

template
<button @click="awesome = !awesome">Přepnout</button>

<h1 v-if="awesome">Vue je super!</h1>
<h1 v-else>Ale ne 😢</h1>

Vue je super!

Element v-else musí vždy následovat bezprostředně za v-if nebo za v-else-if - jinak nebude rozpoznán.

v-else-if

Jak název v-else-if napovídá, slouží tato direktiva jako „else if“ blok k v-if. Může být zřetězena i několikrát za sebou:

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>

Stejně jako v-else, musí element v-else-if následovat bezprostředně po v-if nebo v-else-if.

v-if na <template>

Protože je v-if direktiva, musí být připojena k jedinému prvku. Ale co když chceme přepnout více než jeden prvek? V tom případě můžeme použít v-if na element <template>, který slouží jako neviditelný obal. Konečný vykreslený výsledek nebude prvek <template> obsahovat.

template
<template v-if="ok">
  <h1>Titulek</h1>
  <p>Odstavec 1</p>
  <p>Odstavec 2</p>
</template>

Na <template> lze použít i v-else a v-else-if.

v-show

Jiná možnost pro podmíněné zobrazení elementu je direktiva v-show. Použití je v zásadě to samé:

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

Rozdíl je v tom, že prvek s v-show bude vždy vykreslen a zůstane v DOM; v-show pouze přepíná vlastnost CSS elementu display.

v-show nelze použití na element <template> a také nefunguje dohromady s v-else.

v-if vs. v-show

v-if je „skutečné“ podmíněné vykreslování, protože zajišťuje, že event listenery a vnořené komponenty uvnitř podmíněného bloku budou správně zničeny a znovu vytvořeny během přepínání.

v-if je také „lazy“: pokud je podmínka při počátečním vykreslení nepravdivá, neudělá nic - podmíněný blok se nevykreslí, dokud se podmínka poprvé nestane pravdivou.

Ve srovnání s tím je v-show je mnohem jednodušší - prvek je vždy vykreslen bez ohledu na počáteční podmínku, s přepínáním založeným na CSS.

Obecně řečeno, v-if má vyšší náklady na přepínání, zatímco v-show má vyšší počáteční náklady na vykreslování. Takže upřednostněte v-show, pokud potřebujete něco přepínat velmi často, a použijte v-if, pokud je nepravděpodobné, že se podmínka za běhu změní.

v-if s v-for

Poznámka

Nedoporučuje se používat v-if a v-for na stejném prvku kvůli jejich implicitní prioritě. Podrobnosti naleznete v Průvodci stylováním.

Když jsou v-if a v-for použity na stejném prvku, bude nejprve vyhodnoceno v-if. Podrobnosti naleznete v průvodci vykreslováním seznamu.

Podmíněné vykreslování has loaded