Sobes.tech
Middle

A cosa servono gli slot in Vue e come funzionano?

sobes.tech AI

Risposta dell'AI

Gli slot in Vue vengono utilizzati per inserire contenuto dall'esterno nei componenti. Questo permette di creare componenti flessibili e riutilizzabili.

Esistono tre tipi di slot:

  • Slot predefiniti (Default Slots): Utilizzati per inserire contenuto principale.

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

    Uso:

    <mio-componente>
      <p>Questo contenuto verrà inserito nello slot predefinito.</p>
    </mio-componente>
    
  • Slot nominati (Named Slots): Permettono di inserire contenuto in slot specifici all'interno del componente, differenziati per nome.

    <template>
      <div>
        <slot name="header"></slot>
        <div>Contenuto principale del componente</div>
        <slot name="footer"></slot>
      </div>
    </template>
    

    Uso:

    <mio-componente>
      <template v-slot:header>
        <h2>Titolo</h2>
      </template>
      <template v-slot:footer>
        <p>Piede di pagina</p>
      </template>
    </mio-componente>
    

    Sintassi abbreviata per v-slot:

    <mio-componente>
      <template #header>
        <h2>Titolo (sintassi abbreviata)</h2>
      </template>
    </mio-componente>
    
  • Slot con ambito limitato (Scoped Slots): Permettono al componente figlio di trasmettere dati al componente genitore tramite lo slot. Il genitore può usare questi dati durante il rendering del contenuto dello slot.

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

    Uso:

    <mia-lista :items="['Mela', 'Banana', 'Arancia']">
      <template v-slot:default="slotProps">
        {{ slotProps.index + 1 }}. {{ slotProps.item }}
      </template>
    </mia-lista>
    

    Destrutturazione di slotProps:

    <mia-lista :items="['Mela', 'Banana', 'Arancia']">
      <template v-slot="{ item, index }">
        {{ index + 1 }}. {{ item }} (Destrutturazione)
      </template>
    </mia-lista>
    

I slot funzionano creando "posti" all'interno del template del componente figlio, dove il genitore può inserire il proprio contenuto. Durante il rendering, Vue sostituisce il tag <slot> (o <slot name="...">) con il contenuto fornito dal componente genitore. Nel caso degli slot con ambito, i dati del componente figlio sono disponibili tramite l'oggetto degli argomenti del template dello slot nel componente genitore.