Na čo sa v Vue používajú sloty a ako fungujú?
sobes.tech AI
Odpoveď od AI
Vo Vue sa sloty používajú na vkladanie obsahu zvonku do komponentov. To umožňuje vytvárať flexibilné a znovu použiteľné komponenty.
Existujú tri typy slotov:
-
Predvolené (Default Slots): Používajú sa na vloženie hlavného obsahu.
<template> <div> <slot></slot> </div> </template>Použitie:
<my-component> <p>Tento obsah bude vložený do predvoleného slotu.</p> </my-component> -
Menované sloty (Named Slots): Umožňujú vkladať obsah do konkrétnych slotov vnútri komponentu, odlišujúcich sa podľa mena.
<template> <div> <slot name="header"></slot> <div>Hlavný obsah komponentu</div> <slot name="footer"></slot> </div> </template>Použitie:
<my-component> <template v-slot:header> <h2>Nadpis</h2> </template> <template v-slot:footer> <p>Pätka</p> </template> </my-component>Skrátená syntax pre
v-slot:<my-component> <template #header> <h2>Nadpis (skrátená syntax)</h2> </template> </my-component> -
Scoped sloty (Scoped Slots): Umožňujú dieťaťu komponentu odovzdať údaje rodičovi prostredníctvom slotu. Rodič môže tieto údaje použiť pri vykresľovaní obsahu slotu.
<template> <ul> <li v-for="item in items" :key="item.id"> <slot :item="item" :index="index"></slot> </li> </ul> </template>Použitie:
<my-list :items="['Apple', 'Banana', 'Orange']"> <template v-slot:default="slotProps"> {{ slotProps.index + 1 }}. {{ slotProps.item }} </template> </my-list>Destrukturalizácia
slotProps:<my-list :items="['Apple', 'Banana', 'Orange']"> <template v-slot="{ item, index }"> {{ index + 1 }}. {{ item }} (Destrukturalizácia) </template> </my-list>
Sloty fungujú tak, že vytvárajú "miesta" v šablóne dieťaťa, kam rodič môže vložiť svoj vlastný obsah. Pri renderovaní Vue nahradí <slot> (alebo <slot name="...">) obsahom, ktorý poskytol rodič. Pri scoped slotoch sú údaje z dieťaťa dostupné prostredníctvom objektu argumentu šablóny slotu v rodičovskej komponenty.