Sobes.tech
Middle

Na co se ve Vue používají sloty a jak fungují?

sobes.tech AI

Odpověď od AI

Sloty ve Vue se používají k vkládání obsahu zvenčí do komponent. To umožňuje vytvářet flexibilní a znovu použitelné komponenty.

Existují tři typy slotů:

  • Výchozí sloty (Default Slots): Používají se k vložení hlavního obsahu.

    <template>
      <div>
        <slot></slot>
      </div>
    </template>
    

    Použití:

    <můj-komponent>
      <p>Tento obsah bude vložen do výchozího slotu.</p>
    </můj-komponent>
    
  • Názvové sloty (Named Slots): Umožňují vkládání obsahu do konkrétních slotů uvnitř komponenty, odlišených podle názvu.

    <template>
      <div>
        <slot name="header"></slot>
        <div>Hlavní obsah komponenty</div>
        <slot name="footer"></slot>
      </div>
    </template>
    

    Použití:

    <můj-komponent>
      <template v-slot:header>
        <h2>Nadpis</h2>
      </template>
      <template v-slot:footer>
        <p>Patička</p>
      </template>
    </můj-komponent>
    

    Zkrácená syntaxe pro v-slot:

    <můj-komponent>
      <template #header>
        <h2>Nadpis (zkrácená syntaxe)</h2>
      </template>
    </můj-komponent>
    
  • Scoped Slots: Umožňují dětskému komponentu předávat data rodičovskému komponentu přes slot. Rodič může tato data použít při vykreslování obsahu slotu.

    <template>
      <ul>
        <li v-for="item in items" :key="item.id">
          <slot :item="item" :index="index"></slot>
        </li>
      </ul>
    </template>
    

    Použití:

    <má-seznam :items="['Jablko', 'Banán', 'Pomeranč']">
      <template v-slot:default="slotProps">
        {{ slotProps.index + 1 }}. {{ slotProps.item }}
      </template>
    </má-seznam>
    

    Destrukturalizace slotProps:

    <má-seznam :items="['Jablko', 'Banán', 'Pomeranč']">
      <template v-slot="{ item, index }">
        {{ index + 1 }}. {{ item }} (Destrukturalizace)
      </template>
    </má-seznam>
    

Sloty fungují tak, že vytvářejí "místa" uvnitř šablony dětského komponentu, kam může rodič vložit svůj vlastní obsah. Při vykreslování Vue nahradí <slot> (nebo <slot name="...">) obsahem, který poskytl rodičovský komponent. U scoped slotů jsou data z dětského komponentu dostupná přes objekt argumentů šablony slotu v rodičovském komponentu.