Vestavěné speciální elementy
Nejsou to komponenty
<component>
, <slot>
a <template>
jsou komponentám-podobné funkce, jenž jsou součástí syntaxe šablon. Nejedná se o skutečné komponenty a jsou zpracovávány během kompilace šablony. Proto se obvykle v šablonách píší malými písmeny.
<component>
„Meta komponenta“ pro vykreslování dynamických komponent nebo elementů.
Props
tsinterface DynamicComponentProps { is: string | Component }
Podrobnosti
Skutečná komponenta k vykreslení je určena vlastností
is
.Když je
is
řetězec, může to být buď název HTML tagu nebo zaregistrovaný název komponenty.Alternativně může být
is
vázán přímo na definici komponenty.
Příklad
Vykreslování komponent podle zaregistrovaného názvu (Options API):
vue<script> import Foo from './Foo.vue' import Bar from './Bar.vue' export default { components: { Foo, Bar }, data() { return { view: 'Foo' } } } </script> <template> <component :is="view" /> </template>
Vykreslování komponent podle definice (Composition API se
<script setup>
):vue<script setup> import Foo from './Foo.vue' import Bar from './Bar.vue' </script> <template> <component :is="Math.random() > 0.5 ? Foo : Bar" /> </template>
Vykreslování HTML elementů:
template<component :is="href ? 'a' : 'span'"></component>
Do
is
lze předat všechny vestavěné komponenty, ale musíte je zaregistrovat, pokud je chcete předávat jménem. Například:vue<script> import { Transition, TransitionGroup } from 'vue' export default { components: { Transition, TransitionGroup } } </script> <template> <component :is="isGroup ? 'TransitionGroup' : 'Transition'"> ... </component> </template>
Registrace není vyžadována, pokud do
is
místo jejího názvu předáte samotnou komponentu, např. ve<script setup>
.Pokud je na tagu
<component>
použitv-model
, kompilátor šablony jej transformuje na vlastnost (prop)modelValue
a event listenerupdate:modelValue
, podobně jako by to udělal pro jakoukoli jinou komponentu. Není to však kompatibilní s nativními HTML elementy, jako jsou<input>
nebo<select>
. Kvůli tomu nebude použitív-model
s dynamicky vytvořeným nativním elementem fungovat:vue<script setup> import { ref } from 'vue' const tag = ref('input') const username = ref('') </script> <template> <!-- Toto nebude fungovat, protože 'input' je nativní HTML element --> <component :is="tag" v-model="username" /> </template>
V praxi se tento okrajový případ běžně nevyskytuje, protože nativní formulářová pole jsou ve skutečných aplikacích obvykle obalena komponentami. Pokud však skutečně potřebujete použít nativní element přímo, můžete
v-model
ručně rozdělit na atribut a událost.Viz také: Dynamické komponenty
<slot>
Určuje prostor pro vložený obsah uvnitř šablon.
Props
tsinterface SlotProps { /** * Jakékoli vlastnosti předané do <slot> budou předány jako parametry * pro scoped sloty */ [key: string]: any /** * Rezervováno pro specifikaci jména slotu. */ name?: string }
Podrobnosti
Element
<slot>
může použít atributname
k určení jména slotu. Pokud není specifikováno žádné jméno, bude vykreslen výchozí (default) slot. Další atributy předané do elementu slotu budou předány jako vlastnosti (props) scoped slotu definovaného v rodičovské komponentě.Samotný element bude nahrazen obsahem odpovídajícího slotu.
<slot>
elementy ve Vue šablonách jsou kompilovány do JavaScriptu, aby nedocházelo k jejich záměně s nativními<slot>
elementy.Viz také: Průvodce - Sloty
<template>
Tag <template>
se používá jako placeholder, když chceme použít vestavěnou direktivu, aniž bychom vykreslovali element v DOM.
Podrobnosti
Speciální obsluha je pro
<template>
spuštěna pouze tehdy, pokud je tag použit spolu s jednou z těchto direktiv:v-if
,v-else-if
nebov-else
v-for
v-slot
Pokud žádná z těchto direktiv přítomna není, bude vykreslen jako nativní
<template>
element.<template>
sv-for
může mít také atributkey
. Všechny ostatní atributy a direktivy budou igorovány, protože nemají bez odpovídajícího prvku význam.Single-file komponenty (SFC) používají tag
<template>
nejvyšší úrovně k obalení celé šablony. Tento způsob použití je oddělen od použití<template>
popsaného výše. Tento tag nejvyšší úrovně není součástí samotné šablony a nepodporuje syntaxi šablony, jako jsou direktivy.Viz také: