Built-in Components
Rejestracja i użycie
Wbudowane komponenty mogą być używane bezpośrednio w szablonach bez konieczności ich rejestrowania. Są one również tree-shakeable: są dołączane do kompilacji tylko wtedy, gdy są używane.
Podczas korzystania z nich w render functions, muszą one zostać wyraźnie zaimportowane. Na przykład:
js
import { h, Transition } from 'vue'
h(Transition, {
/* props */
})
<Transition>
Zapewnia animowane efekty przejścia dla pojedynczego elementu lub komponentu.
Props
tsinterface TransitionProps { /** * Służy do automatycznego generowania nazw klas CSS przejścia. * np. `name: 'fade'` automatycznie rozszerzy się do `.fade-enter`, * `.fade-enter-active`, itd. */ name?: string /** * Czy stosować klasy przejścia CSS. * Domyślnie: true */ css?: boolean /** * Określa typ zdarzeń przejścia, na które należy czekać, aby * określić czas zakończenia przejścia. * Domyślnym zachowaniem jest automatyczne wykrywanie typu, który ma * dłuższy czas trwania. */ type?: 'transition' | 'animation' /** * Określa jawny czas trwania przejścia. * Domyślnym zachowaniem jest oczekiwanie na pierwsze zdarzenie `transitionend` * lub `animationend` na głównym elemencie przejścia. */ duration?: number | { enter: number; leave: number } /** * Kontroluje sekwencję czasową opuszczania/wchodzenia przejść. * Domyślnym zachowaniem jest jednoczesne. */ mode?: 'in-out' | 'out-in' | 'default' /** * Czy zastosować przejście przy początkowym renderowaniu. * Domyślnie: false */ appear?: boolean /** * Rekwizyty do dostosowywania klas przejścia. * Używanie kebab-case w szablonach, np. enter-from-class=„xxx”. */ enterFromClass?: string enterActiveClass?: string enterToClass?: string appearFromClass?: string appearActiveClass?: string appearToClass?: string leaveFromClass?: string leaveActiveClass?: string leaveToClass?: string }
Zdarzenia
@before-enter
@before-leave
@enter
@leave
@appear
@after-enter
@after-leave
@after-appear
@enter-cancelled
@leave-cancelled
(v-show
only)@appear-cancelled
Przykład
Prosty element:
template<Transition> <div v-if="ok">toggled content</div> </Transition>
Wymuszenie przejścia poprzez zmianę atrybutu
key
:template<Transition> <div :key="text">{{ text }}</div> </Transition>
Komponent dynamiczny, z trybem przejścia + animacja po pojawieniu się:
template<Transition name="fade" mode="out-in" appear> <component :is="view"></component> </Transition>
Słuchanie wydarzeń przejściowych:
template<Transition @after-enter="onTransitionComplete"> <div v-show="ok">toggled content</div> </Transition>
Zobacz również Guide - Transition
<TransitionGroup>
Zapewnia efekty przejścia dla wielu elementów lub komponentów na liście.
Props
<TransitionGroup>
akceptuje te same rekwizyty co<Transition>
z wyjątkiemmode
, plus dwa dodatkowe rekwizyty:tsinterface TransitionGroupProps extends Omit<TransitionProps, 'mode'> { /** * Jeśli nie zostanie zdefiniowana, będzie renderowana jako fragment. */ tag?: string /** * Aby dostosować klasę CSS stosowaną podczas przejść. * Użyj kebab-case w szablonach, np. move-class=„xxx”. */ moveClass?: string }
Zdarzenia
<TransitionGroup>
emituje te same zdarzenia co<Transition>
.Szczegóły
Domyślnie,
<TransitionGroup>
nie renderuje elementu DOM, ale można go zdefiniować za pomocą właściwościtag
.Zauważ, że każde dziecko w
<transition-group>
musi posiadać unikalny klucz by animacje działały poprawnie.<TransitionGroup>
wspiera przenoszenie przejść poprzez transformację CSS. Gdy pozycja dziecka na ekranie zmieni się po aktualizacji, zostanie do niego zastosowana ruchoma klasa CSS (automatycznie wygenerowana z atrybutuname
lub skonfigurowana za pomocą właściwościmove-class
). Jeśli właściwość CSStransform
jest „transition-able”, gdy zastosowana jest ruchoma klasa, element zostanie płynnie animowany do miejsca docelowego przy użyciu techniki FLIP.Przykład
template<TransitionGroup tag="ul" name="slide"> <li v-for="item in items" :key="item.id"> {{ item.text }} </li> </TransitionGroup>
Zobacz również Guide - TransitionGroup
<KeepAlive>
Buforuje dynamicznie przełączane komponenty zawinięte wewnątrz.
Props
tsinterface KeepAliveProps { /** * Jeśli określono, tylko komponenty o nazwach dopasowanych przez * `include` będą buforowane. */ include?: MatchPattern /** * Każdy komponent z nazwą dopasowaną przez `exclude` będzie * nie będzie buforowany. */ exclude?: MatchPattern /** * Maksymalna liczba instancji komponentów do buforowania. */ max?: number | string } type MatchPattern = string | RegExp | (string | RegExp)[]
Szczegóły
Po owinięciu wokół dynamicznego komponentu,
<KeepAlive>
buforuje nieaktywne instancje komponentu bez ich niszczenia.W dowolnym momencie może istnieć tylko jedna aktywna instancja komponentu jako bezpośrednie dziecko
<KeepAlive>
.Gdy komponent jest przełączany wewnątrz
<KeepAlive>
, jego hakiactivated
ideactivated
cyklu życia zostaną odpowiednio wywołane, zapewniając alternatywę dlamounted
iunmounted
, które nie są wywoływane. Dotyczy to bezpośredniego dziecka<KeepAlive>
, jak również wszystkich jego potomków.Przykład
Podstawowe użycie:
template<KeepAlive> <component :is="view"></component> </KeepAlive>
W przypadku użycia z gałęziami
v-if
/v-else
, w danym momencie może być renderowany tylko jeden komponent:template<KeepAlive> <comp-a v-if="a > 1"></comp-a> <comp-b v-else></comp-b> </KeepAlive>
Używane razem z
<Transition>
:template<Transition> <KeepAlive> <component :is="view"></component> </KeepAlive> </Transition>
Używanie
include
/exclude
:template<!-- comma-delimited string --> <KeepAlive include="a,b"> <component :is="view"></component> </KeepAlive> <!-- regex (use `v-bind`) --> <KeepAlive :include="/a|b/"> <component :is="view"></component> </KeepAlive> <!-- Array (use `v-bind`) --> <KeepAlive :include="['a', 'b']"> <component :is="view"></component> </KeepAlive>
Użycie z
max
:template<KeepAlive :max="10"> <component :is="view"></component> </KeepAlive>
Zobacz również Guide - KeepAlive
<Teleport>
Renderuje zawartość slotu do innej części DOM.
Props
tsinterface TeleportProps { /** * Wymagane. Określa kontener docelowy. * Może być selektorem lub rzeczywistym elementem. */ to: string | HTMLElement /** * Gdy `true`, zawartość pozostanie w oryginalnej * lokalizacji, a nie przeniesiona do kontenera docelowego. * Może być zmieniana dynamicznie. */ disabled?: boolean }
Przykład
Określenie kontenera docelowego:
template<Teleport to="#some-id" /> <Teleport to=".some-class" /> <Teleport to="[data-teleport]" />
Warunkowe wyłączenie:
template<Teleport to="#popup" :disabled="displayVideoInline"> <video src="./my-movie.mp4"> </Teleport>
Zobacz również Guide - Teleport
<Suspense>
Służy do orkiestracji zagnieżdżonych zależności asynchronicznych w drzewie komponentów.
Props
tsinterface SuspenseProps { timeout?: string | number suspensible?: boolean }
Zdarzenia
@resolve
@pending
@fallback
Szczegóły
<Suspense>
akceptuje dwa sloty: slot#default
i slot#fallback
. Wyświetli on zawartość slotu rezerwowego podczas renderowania domyślnego slotu w pamięci.Jeśli napotka zależności asynchroniczne (Async Components i komponenty z
async setup()
) podczas renderowania domyślnego slotu, poczeka aż wszystkie z nich zostaną rozwiązane przed wyświetleniem domyślnego slotu.Ustawiając Suspense jako
suspensible
, cała obsługa zależności asynchronicznych będzie obsługiwana przez nadrzędne Suspense. Zobacz szczegóły implementacjiZobacz również Guide - Suspense