# Componentes Integrados
Os componentes integrados podem ser usados diretamente em templates sem a necessidade de registro.
Os componentes <keep-alive>, <transition>, <transition-group>, e <teleport> podem ser todos tree-shaken por empacotadores (bundlers), de modo que só são incluídos na construção se forem usados. Eles também podem ser importados explicitamente se você precisar de acesso direto ao próprio componente:
// Distribuição em CDN do Vue
const { KeepAlive, Teleport, Transition, TransitionGroup } = Vue
2
// Distribuição em ESM do Vue
import { KeepAlive, Teleport, Transition, TransitionGroup } from 'vue'
2
<component> e <slot> são recursos da sintaxe de template em forma de componentes. Eles não são componentes verdadeiros e não podem ser importados como os componentes mostrados acima.
# component
Propriedades:
is-string | Component | VNode
Uso:
Um "meta componente" para renderizar componentes dinâmicos. O componente real a ser renderizado é determinado pela propriedade
is. Uma propriedadeiscomo string pode ser um nome de tag HTML ou um nome de componente.<!-- um componente dinâmico controlado --> <!-- pela propriedade `componentId` na vm --> <component :is="componentId"></component> <!-- pode também renderizar um componente registrado ou componente passado como propriedade --> <component :is="$options.components.child"></component> <!-- pode referenciar componentes por string --> <component :is="condition ? 'FooComponent' : 'BarComponent'"></component> <!-- pode ser usado para renderizar elementos HTML nativos --> <component :is="href ? 'a' : 'span'"></component>1
2
3
4
5
6
7
8
9
10
11
12Uso com componentes integrados:
Os componentes integrados
KeepAlive,Transition,TransitionGroup, eTeleportpodem ser passados parais, mas você deve registrá-los se quiser transmiti-los por nome. Por exemplo:const { Transition, TransitionGroup } = Vue const Component = { components: { Transition, TransitionGroup }, template: ` <component :is="isGroup ? 'TransitionGroup' : 'Transition'"> ... </component> ` }1
2
3
4
5
6
7
8
9
10
11
12
13
14O registro não será necessário se você passar o próprio componente para
isao invés de seu nome.Uso com VNodes:
Em casos de uso avançados, às vezes pode ser útil renderizar um VNode existente por meio de um template. Usar um
<component>torna isso possível, mas deve ser visto como uma válvula de escape, usada para evitar reescrever o template inteiro como uma funçãorender.<component :is="vnode" :key="aSuitableKey" />1Uma ressalva de misturar VNodes e templates dessa maneira é que você precisa fornecer um atributo
keyadequado. O VNode será considerado estático, portanto, quaisquer atualizações serão ignoradas, a menos que akeyseja alterada. Akeypode estar no VNode ou na tag<component>, mas de qualquer forma ela deve mudar toda vez que você quiser que o VNode seja renderizado novamente. Esta ressalva não se aplica se os nós tiverem tipos diferentes, por exemplo, alterando umspanpara umdiv.Ver também: Componentes Dinâmicos
# transition
Propriedades:
name-stringUsado para gerar automaticamente nomes de classes CSS de transições. Por exemplo,name: 'fade'expandirá automaticamente para.fade-enter,.fade-enter-active, etc.appear-boolean, Se a transição deve ser aplicada na renderização inicial deverá ser configurado paratrue. Por padrão,false.persisted-boolean. Se estivertrue, indica que esta transição não insere/remove realmente o elemento, mas alterna o status entre mostrar/esconder. Os gatilhos de transição são injetados, mas serão ignorados pelo renderizador. Em vez disso, uma diretiva personalizada pode controlar a transição chamando os gatilhos injetados (por exemplov-show).css-boolean. Aplicar ou não classes de transição CSS. Por padrão étrue. Se configurado parafalse, apenas acionará gatilhos registrados no JavaScript por meio de eventos de componentes.type-string. Especifica o tipo de eventos de transição a serem aguardados para determinar o tempo de término da transição. Os valores disponíveis são"transition"and"animation". Por padrão, será detectado automaticamente o tipo que tenha uma duração mais longa.mode-string. Controla a sequência de temporização das transições de saída/entrada. Modos disponíveis são"out-in"e"in-out"; o padrão é simultâneo.duration-number | { enter: number, leave: number }. Especifica a duração da transição. Por padrão, o Vue aguarda o primeiro evento detransitionendouanimationendno elemento de transição raiz.enter-from-class-stringleave-from-class-stringappear-class-stringenter-to-class-stringleave-to-class-stringappear-to-class-stringenter-active-class-stringleave-active-class-stringappear-active-class-string
Eventos:
before-enterbefore-leaveenterleaveappearafter-enterafter-leaveafter-appearenter-cancelledleave-cancelled(apenasv-show)appear-cancelled
Uso:
<transition>servem como efeitos de transição para elemento/componente único. O<transition>aplica apenas o comportamento de transição para o conteúdo dentro do wrapper; Ele não renderiza um elemento DOM extra ou aparece na hierarquia dos componentes inspecionados.<!-- elemento simples --> <transition> <div v-if="ok">conteúdo alternado</div> </transition> <!-- componente dinâmico --> <transition name="fade" mode="out-in" appear> <component :is="view"></component> </transition> <!-- gatilhos de evento --> <div id="transition-demo"> <transition @after-enter="transitionComplete"> <div v-show="ok">conteúdo alternado</div> </transition> </div>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16const app = createApp({ ... methods: { transitionComplete (el) { // para o 'el' passado que é um elemento do DOM como um argumento ... } } ... }) app.mount('#transition-demo')1
2
3
4
5
6
7
8
9
10
11Ver também: Transições de entrada e saída
# transition-group
Propriedades:
tag-string, se não definido, renderiza sem um elemento raiz.move-class- substitui a classe CSS aplicada durante a transição em movimento.- expõe as mesmas propriedades que
<transition>excetomode.
Eventos:
- expõe os mesmos eventos que
<transition>.
- expõe os mesmos eventos que
Uso:
<transition-group>fornece efeitos de transição para múltiplos elementos/componentes. Por padrão, ele não renderiza um elemento wrapper no DOM, mas um pode ser definido por meio do atributotag.Note que cada filho em um
<transition-group>deve ser identificado com chave única para as animações funcionarem corretamente.<transition-group>suporta transições de movimento via transformações CSS. Quando a posição de um elemento filho na tela muda após uma atualização, ele aplicará uma classe de movimento CSS (gerada automaticamente a partir do atributonameou configurada com o atributomove-class). Se a propriedade CSStransformfor passível de transição quando a classe de movimento é aplicada, o elemento será animado suavemente para o seu destino usando a técnica FLIP (opens new window).<transition-group tag="ul" name="slide"> <li v-for="item in items" :key="item.id"> {{ item.text }} </li> </transition-group>1
2
3
4
5Ver também: Lista de Transições
# keep-alive
Propriedades:
include-string | RegExp | Array. Apenas os componentes com nomes correspondentes serão colocados em cache.exclude-string | RegExp | Array. Qualquer componente com o nome correspondente não será colocado em cache.max-number | string. O número máximo de instâncias do componente a serem colocadas em cache.
Uso:
Quando wrapped (envolvido) em torno de um componente dinâmico,
<keep-alive>coloca as instâncias dos componentes inativos em cache sem os destruir. Semelhante a<transition>,<keep-alive>é um componente abstrato: ele não renderiza um elemento DOM em si, e não aparece na cadeia pai do componente.Quando um componente é alternado dentro de
<keep-alive>, seus gatilhos de ciclo de vidaactivatededeactivatedserão invocados de acordo, fornecendo uma alternativa paramountedeunmounted, que não são chamados. (Isso se aplica ao filho direto de<keep-alive>, bem como a todos os seus descendentes.)Usado principalmente para preservar o estado do componente ou evitar re-renderização.
<!-- básico --> <keep-alive> <component :is="view"></component> </keep-alive> <!-- filhos com multiplas condições --> <keep-alive> <comp-a v-if="a > 1"></comp-a> <comp-b v-else></comp-b> </keep-alive> <!-- usado juntamente com `<transition>` --> <transition> <keep-alive> <component :is="view"></component> </keep-alive> </transition>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Note que,
<keep-alive>é projetado para o caso em que ele possui um componente filho direto que está sendo alternado. Isso não funciona se você tiverv-fordentro dele. Quando há múltiplos filhos condicionais, como acima,<keep-alive>exige que apenas um filho seja renderizado de cada vez.includeeexcludeAs propriedades
includeeexcludepermitem que os componentes sejam cacheados condicionalmente. Ambas as propriedades podem ser uma String separada por vígulas, uma RegExp ou um Array:<!-- string separada por vírgulas --> <keep-alive include="a,b"> <component :is="view"></component> </keep-alive> <!-- regex (usando `v-bind`) --> <keep-alive :include="/a|b/"> <component :is="view"></component> </keep-alive> <!-- Array (usando `v-bind`) --> <keep-alive :include="['a', 'b']"> <component :is="view"></component> </keep-alive>1
2
3
4
5
6
7
8
9
10
11
12
13
14A correspondência é verificada primeiro na opção
namedo componente, depois pelo nome no registro local (a chave dentro da opçãocomponentsdo pai) se a opçãonamenão estiver disponível. Os componentes anônimos não poder ser comparados.maxO número máximo de instâncias do componente a serem guardadas em cache. Quando esse número for atingido, a instância do componente em cache que foi acessada menos recentemente será destruída antes de criar uma nova instância.
<keep-alive :max="10"> <component :is="view"></component> </keep-alive>1
2
3Aviso
<keep-alive>não funciona com componentes funcionais porque eles não têm instâncias a serem guardadas em cache.Ver também: Componentes dinâmicos - keep-alive
# slot
Propriedades:
name-string, Usado para o slot nomeado.
Uso:
<slot>servem como pontos de distribuição de conteúdo em templates de componentes. O<slot>em si será substituído.Para obter detalhes sobre o uso, consulte a seção do guia no link abaixo.
Ver também: Distribuição de Conteúdo com Slots
# teleport
Propriedades:
to-string. Propriedade obrigatória, tem que ser um seletor (query) válido, ou um elemento HTML (HTMLElement) (se usado no ambiente do navegador). Especifica um elemento de destino para onde o conteúdo de<teleport>será movido.
<!-- ok --> <teleport to="#some-id" /> <teleport to=".some-class" /> <teleport to="[data-teleport]" /> <!-- Errado --> <teleport to="h1" /> <teleport to="some-string" />1
2
3
4
5
6
7
8disabled-boolean. Esta propriedade opcional pode ser usada para desativar a funcionalidade de<teleport>, o que significa que o conteúdo do slot não será movido para qualquer lugar, e em vez disso será renderizado onde você especificou o<teleport>no componente pai que o envolve.
<teleport to="#popup" :disabled="displayVideoInline"> <video src="./my-movie.mp4"> </teleport>1
2
3Observe que isso moverá os nós DOM reais em vez de serem destruídos e recriados e também manterá todas as instâncias do componente vivas. Todos os elementos HTML com estado (por exemplo, um vídeo em reprodução) manterão seu estado.
Ver também: Componente de teletransporte