Componenti integrati
Registrazione e uso
I componenti integrati possono essere usati direttamente nel template senza essere registrati. Sono anche tree-shakeable: sono inclusi nella build solamente quando sono utilizzati.
Quando usati nelle render functions, devono essere importati esplicitamente. Per esempio:
js
import { h, Transition } from 'vue'
h(Transition, {
/* props */
})
<Transition>
Fornisce un'animazione di transizione a un solo elemento o componente.
Props
tsinterface TransitionProps { /** * Usato per generare automaticamente classi CSS per le transizioni. * Per esempio `name: 'fade'` verrà automaticamente espanso in `.fade-enter`, * `.fade-enter-active`, etc. */ name?: string /** * Definisce se applicare le classi di transizione CSS. * Predefinito: true */ css?: boolean /** * Specifica il tipo di evento di transizione da attendere * per determinare la tempistica della fine della transizione. * Il comportamento predefinito rileva automaticamente il tipo che ha * la durata maggiore. */ type?: 'transition' | 'animation' /** * Specifica esplicitamente la durata della transizione. * Il comportamento predefinito è di attendere il primo evento * `transitionend` o `animationend` nel root dell'elemento transition. */ duration?: number | { enter: number; leave: number } /** * Controlla la sequenza temporale delle transizioni di uscita/entrata. * Il comportamento predefinito è simultaneo */ mode?: 'in-out' | 'out-in' | 'default' /** * Definisce se applicare la transizione al rendering iniziale. * Predefinito: false */ appear?: boolean /** * Props per personalizzare le classi di transizione. * Usa il kebab-case nei template, per esempio enter-from-class="xxx" */ enterFromClass?: string enterActiveClass?: string enterToClass?: string appearFromClass?: string appearActiveClass?: string appearToClass?: string leaveFromClass?: string leaveActiveClass?: string leaveToClass?: string }
Eventi
@before-enter
@before-leave
@enter
@leave
@appear
@after-enter
@after-leave
@after-appear
@enter-cancelled
@leave-cancelled
(solov-show
)@appear-cancelled
Esempio
Elemento semplice:
template<Transition> <div v-if="ok">contenuto attivato</div> </Transition>
Forzare una transizione cambiando l'attributo
key
:template<Transition> <div :key="text">{{ text }}</div> </Transition>
Componente dinamico, con modalità di transizione + animazione in entrata:
template<Transition name="fade" mode="out-in" appear> <component :is="view"></component> </Transition>
Ascolto eventi transizione:
template<Transition @after-enter="onTransitionComplete"> <div v-show="ok">toggled content</div> </Transition>
Vedi anche Guida
<Transition>
<TransitionGroup>
Fornisce effetti di transizione per elementi multipli o componenti in un elenco.
Props
<TransitionGroup>
accetta le stesse props di<Transition>
trannemode
, più due prop aggiuntive:tsinterface TransitionGroupProps extends Omit<TransitionProps, 'mode'> { /** * Se non definito, renderizza come un fragment */ tag?: string /** * Per personalizzare la classe CSS applicata durante la transizione. * Usa il kebab-case nel template, per esempio move-class="xxx" */ moveClass?: string }
Eventi
<TransitionGroup>
emette gli stessi eventi di<Transition>
.Dettagli
Di default,
<TransitionGroup>
non renderizza un elemento DOM wrapper, ma uno può essere definito attraverso la proptag
.Nota che ogni figlio in
<transition-group>
deve avere una chiave univoca per l'animazione per funzionare correttamente.<TransitionGroup>
supporta le transizioni tramite trasformazione CSS. Quando la posizione di un figlio nello schermo cambia dopo un aggiornamento, gli verrà applicata una classe CSS di movimento (generata automaticamente dall'attributoname
o configurato con la propmove-class
). Se la proprietà CSStransform
è "transition-able" quando la classe di movimento è applicata, l'elemento verrà animato fluidamente alla sua destinazione usando la tecnica FLIP.Esempio
template<TransitionGroup tag="ul" name="slide"> <li v-for="item in items" :key="item.id"> {{ item.text }} </li> </TransitionGroup>
Vedi anche Guida - TransitionGroup
<KeepAlive>
Memorizza nella cache i componenti attivati/disattivati dinamicamente racchiusi all'interno.
Props
tsinterface KeepAliveProps { /** * Se specificata, solo i componenti con gli stessi nomi corrispondenti a * `include` saranno memorizzati nella cache. */ include?: MatchPattern /** * Qualsiasi componente con un nome corrispondente a `exclude` * non verrà memorizzato nella cache. */ exclude?: MatchPattern /** * Il numero massimo di istanze del componente da memorizzare nella cache. */ max?: number | string } type MatchPattern = string | RegExp | (string | RegExp)[]
Dettagli
Quando racchiuso in un componente dinamico,
<KeepAlive>
memorizza nella cache le istanze dei componenti inattivi senza distruggerle.Ci può essere solo un'istanza di un componente come figlio diretto di
<KeepAlive>
in qualsiasi momento.Quando un componente è azionato dentro
<KeepAlive>
, i suoi lifecycle hooksactivated
edeactivated
verranno richiamati di conseguenza, offrendo un alternativa amounted
eunmounted
, che non sono chiamati. Questo si applica ai figli diretti di<KeepAlive>
e anche a tutti i suoi discendenti.Esempio
Utilizzo Base:
template<KeepAlive> <component :is="view"></component> </KeepAlive>
Quando usato con
v-if
/v-else
, ci deve essere solo un componente renderizzato alla volta:template<KeepAlive> <comp-a v-if="a > 1"></comp-a> <comp-b v-else></comp-b> </KeepAlive>
Usato insieme a
<Transition>
:template<Transition> <KeepAlive> <component :is="view"></component> </KeepAlive> </Transition>
Usando
include
/exclude
:template<!-- stringa con delimitatore virgola --> <KeepAlive include="a,b"> <component :is="view"></component> </KeepAlive> <!-- regex (usando `v-bind`) --> <KeepAlive :include="/a|b/"> <component :is="view"></component> </KeepAlive> <!-- Array (usando `v-bind`) --> <KeepAlive :include="['a', 'b']"> <component :is="view"></component> </KeepAlive>
Utilizzo con
max
:template<KeepAlive :max="10"> <component :is="view"></component> </KeepAlive>
Vedi anche Guida - KeepAlive
<Teleport>
Renderizza il contenuto dello slot in un' altra parte del DOM.
Props
tsinterface TeleportProps { /** * Obbligatoria. Specifica il container di destinazione. * Può essere sia un selettore o un elemento reale. */ to: string | HTMLElement /** * Quando `true`, il contenuto resterà nella posizione * originale invece di essere spostato nel container di destinazione. * Può essere cambiato dinamicamente. */ disabled?: boolean }
Esempio
Specificando un container di destinazione
template<teleport to="#some-id" /> <teleport to=".some-class" /> <teleport to="[data-teleport]" />
Disabilitazione condizionale:
template<teleport to="#popup" :disabled="displayVideoInline"> <video src="./my-movie.mp4"> </teleport>
Vedi anche Guida - Teleport
<Suspense>
Usato per orchestrare dipendenze asincrone annidate in un albero di componenti.
Props
tsinterface SuspenseProps { timeout?: string | number }
Eventi
@resolve
@pending
@fallback
Dettagli
<Suspense>
accetta due slots: lo slot di#default
e lo slot#fallback
. Mostrerà il contenuto dello slot di fallback mentre renderizza lo slot default in memoria.Se incontra dipendenze asincrone (Componente asincrono e componenti con
async setup()
) mentre renderizza lo slot di default, aspetterà fino a quando tutti sono risolti prima di visualizzare lo slot di default.Vedi anche Guida - Suspense