Vestavěné komponenty
Registrace a použití
Vestavěné komponenty lze používat přímo v šablonách bez nutnosti registrace. Jsou také optimalizovány pro odstranění nepoužívaného kódu (tree-shaking): ve výsledném buildu jsou zahrnuty pouze, pokud jsou použity.
Pro použití ve funkcích pro vykreslení je třeba je explicitně importovat. Například:
js
import { h, Transition } from 'vue'
h(Transition, {
/* props */
})
<Transition>
Poskytuje animované přechodové (transition) efekty pro jeden element nebo jednu komponentu.
Props
tsinterface TransitionProps { /** * Slouží k automatickému generování názvů CSS tříd pro přechody. * Např. `name: 'fade'` se automaticky rozšíří na `.fade-enter`, * `.fade-enter-active`, atd. */ name?: string /** * Určuje, zda se mají CSS třídy přechodů použít. * Výchozí hodnota: true */ css?: boolean /** * Určuje typ událostí přechodů, na které se má čekat * pro určení času ukončení přechodu. * Výchozí chování je automatické detekování typu s delší dobou trvání. */ type?: 'transition' | 'animation' /** * Určuje explicitní doby trvání přechodu. * Výchozí chování je čekání na první událost `transitionend` * nebo `animationend` na root elementu přechodu. */ duration?: number | { enter: number; leave: number } /** * Ovládá časovou posloupnost přechodů při vstupu/výstupu. * Výchozí chování je současné provedení. */ mode?: 'in-out' | 'out-in' | 'default' /** * Určuje, zda se má přechod aplikovat při počátečním vykreslení. * Výchozí hodnota: false */ appear?: boolean /** * Vlastnosti pro přizpůsobení tříd přechodů. * V šablonách použijte kebab-case zápis, např. enter-from-class="xxx" */ enterFromClass?: string enterActiveClass?: string enterToClass?: string appearFromClass?: string appearActiveClass?: string appearToClass?: string leaveFromClass?: string leaveActiveClass?: string leaveToClass?: string }
Události
@before-enter
@before-leave
@enter
@leave
@appear
@after-enter
@after-leave
@after-appear
@enter-cancelled
@leave-cancelled
(pouze prov-show
)@appear-cancelled
Příklad
Jednoduchý element:
template<Transition> <div v-if="ok">přepnutý obsah</div> </Transition>
Vynucení přechodu změnou atributu
key
:template<Transition> <div :key="text">{{ text }}</div> </Transition>
Dynamická komponenta s režimem přechodu + animace při zobrazení:
template<Transition name="fade" mode="out-in" appear> <component :is="view"></component> </Transition>
Naslouchání událostem přechodu:
template<Transition @after-enter="onTransitionComplete"> <div v-show="ok">přepnutý obsah</div> </Transition>
Viz také: Průvodce - Transition
<TransitionGroup>
Poskytuje přechodové efekty pro více elementů nebo komponent v seznamu.
Props
<TransitionGroup>
přijímá stejné props jako<Transition>
s výjimkoumode
, plus dvě další vlastnosti:tsinterface TransitionGroupProps extends Omit<TransitionProps, 'mode'> { /** * Pokud není definováno, vykresluje se jako fragment. */ tag?: string /** * Pro přizpůsobení CSS třídy použité během přechodových animací. * V šablonách použijte kebab-case zápis, např. move-class="xxx" */ moveClass?: string }
Události
<TransitionGroup>
emituje stejné události jako<Transition>
.Podrobnosti
Ve výchozím nastavení
<TransitionGroup>
nevykresluje obalový DOM element, ale lze jej definovat pomocí vlastnostitag
.Pamatujte, že každý potomek v
<transition-group>
musí být jednoznačně označen, aby animace fungovaly správně.<TransitionGroup>
podporuje pohyblivé přechody pomocí CSS transformace. Pokud se pozice potomka na obrazovce po aktualizaci změní, bude mu aplikována pohybová CSS třída (automaticky generovaná z atributuname
nebo konfigurovaná pomocí vlastnostimove-class
). Pokud je CSS vlastnosttransform
při aplikaci pohybové třídy „transition-able“, element bude na své cílové místo plynule animován pomocí techniky FLIP.Příklad
template<TransitionGroup tag="ul" name="slide"> <li v-for="item in items" :key="item.id"> {{ item.text }} </li> </TransitionGroup>
Viz také: Průvodce - TransitionGroup
<KeepAlive>
Ukládá stav dynamicky přepínatelných komponent obalených uvnitř do cache.
Props
tsinterface KeepAliveProps { /** * Pokud je specifikováno, budou do cache ukládány pouze komponenty * s názvy odpovídajícími `include`. */ include?: MatchPattern /** * Jakákoli komponenta s názvem odpovídajícím `exclude` nebude * ukládána do cache. */ exclude?: MatchPattern /** * Maximální počet instancí komponenty, které se mají ukládat do cache. */ max?: number | string } type MatchPattern = string | RegExp | (string | RegExp)[]
Podrobnosti
Když obaluje dynamickou komponentu,
<KeepAlive>
ukládá neaktivní instance komponent, aniž by je ničila.V
<KeepAlive>
může být v každém okamžiku pouze jedna aktivní instance komponenty jako přímý potomek.Když je komponenta uvnitř
<KeepAlive>
přepnuta, budou se volat odpovídající lifecycle hookyactivated
adeactivated
poskytující alternativu kmounted
aunmounted
, které volány nejsou. To platí jak pro přímého potomka<KeepAlive>
, tak pro všechny jeho potomky.Příklad
Základní použití:
template<KeepAlive> <component :is="view"></component> </KeepAlive>
Při použití s větvemi
v-if
/v-else
musí být vždy zobrazena pouze jedna komponenta:template<KeepAlive> <comp-a v-if="a > 1"></comp-a> <comp-b v-else></comp-b> </KeepAlive>
Použití společně s
<Transition>
:template<Transition> <KeepAlive> <component :is="view"></component> </KeepAlive> </Transition>
Použití
include
/exclude
:template<!-- čárkami oddělený řetězec --> <KeepAlive include="a,b"> <component :is="view"></component> </KeepAlive> <!-- regex (použijte `v-bind`) --> <KeepAlive :include="/a|b/"> <component :is="view"></component> </KeepAlive> <!-- Pole (použijte `v-bind`) --> <KeepAlive :include="['a', 'b']"> <component :is="view"></component> </KeepAlive>
Použití s
max
:template<KeepAlive :max="10"> <component :is="view"></component> </KeepAlive>
Viz také: Průvodce - KeepAlive
<Teleport>
Vykresluje obsah svého slotu na jiné části DOM.
Props
tsinterface TeleportProps { /** * Povinné. Určuje cílový kontejner. * Může být buď selektor nebo samotný element. */ to: string | HTMLElement /** * Když je `true`, obsah zůstane na svém původním * místě místo přesunu do cílového kontejneru. * Lze měnit dynamicky. */ disabled?: boolean /** * Když je `true`, Teleport bude před vyhodnocením * svého cíle odložen (defer), dokud nebudou * připojeny (mounted) další části aplikace (Vue 3.5+) */ defer?: boolean }
Příklad
Určení cílového kontejneru:
template<Teleport to="#some-id" /> <Teleport to=".some-class" /> <Teleport to="[data-teleport]" />
Podmíněné vypnutí:
template<Teleport to="#popup" :disabled="displayVideoInline"> <video src="./my-movie.mp4"> </Teleport>
Odložení vyhodnocení cíle:
template<Teleport defer to="#late-div">...</Teleport> <!-- někdy později v šabloně --> <div id="late-div"></div>
Viz také: Průvodce - Teleport
<Suspense>
Používá se pro orchestraci vnořených asynchronních závislostí ve stromu komponent.
Props
tsinterface SuspenseProps { timeout?: string | number suspensible?: boolean }
Události
@resolve
@pending
@fallback
Podrobnosti
<Suspense>
přijímá dva sloty:#default
a#fallback
. Zobrazí obsah fallback slotu, zatímco v paměti vykresluje default slot.Pokud narazí na asynchronní závislosti (Asynchronní komponenty a komponenty s
async setup()
) při vykreslování default slotu, počká, dokud nebudou všechny vyřešeny, než ho zobrazí.Nastavením komponenty Suspense na
suspensible
budou všechny asynchronní závislosti obsluhovány nadřazenou Suspense. Podívejte se na detaily implementace.Viz také: Průvodce - Suspense