Zašto se koriste slotovi u Vue i kako oni funkcionišu?
sobes.tech АИ
Одговор од АИ
U Vue-u se koriste slotovi za ugrađivanje sadržaja iz spoljašnjih komponenti. To omogućava kreiranje fleksibilnih i ponovo upotrebljivih komponenti.
Postoje tri tipa slotova:
-
Podrazumevani (Default Slots): Koriste se za umetanje osnovnog sadržaja.
<template> <div> <slot></slot> </div> </template>Upotreba:
<my-component> <p>Ovaj sadržaj će biti umetnut u podrazumevani slot.</p> </my-component> -
Imenski slotovi (Named Slots): Omogućavaju umetanje sadržaja u specifične slotove unutar komponente, razlikujući se po imenu.
<template> <div> <slot name="header"></slot> <div>Osnovni sadržaj komponente</div> <slot name="footer"></slot> </div> </template>Upotreba:
<my-component> <template v-slot:header> <h2>Naslov</h2> </template> <template v-slot:footer> <p>Futer</p> </template> </my-component>Skraćeni sintaks za
v-slot:<my-component> <template #header> <h2>Naslov (skraćeni sintaks)</h2> </template> </my-component> -
Scoped slotovi (Scoped Slots): Omogućavaju da dete komponenta prosledi podatke roditeljskoj komponenti putem slot-a. Roditeljski komponenta može koristiti te podatke pri renderovanju sadržaja slot-a.
<template> <ul> <li v-for="item in items" :key="item.id"> <slot :item="item" :index="index"></slot> </li> </ul> </template>Upotreba:
<my-list :items="['Apple', 'Banana', 'Orange']"> <template v-slot:default="slotProps"> {{ slotProps.index + 1 }}. {{ slotProps.item }} </template> </my-list>Destrukturiranje
slotProps:<my-list :items="['Apple', 'Banana', 'Orange']"> <template v-slot="{ item, index }"> {{ index + 1 }}. {{ item }} (Destrukturiranje) </template> </my-list>
Slotovi rade tako što stvaraju "mesta" unutar šablona deteta komponente, gde roditelj može umetnuti svoj sadržaj. Pri renderovanju, Vue zamenjuje <slot> (ili <slot name="...">) sa sadržajem koji je obezbedio roditelj. Kod scoped slotova, podaci iz deteta su dostupni putem objekta argumenta šablona slot-a u roditeljskoj komponenti.