Junior
Čo robí metóda $emit vo Vue.js?
sobes.tech AI
Odpoveď od AI
Metóda $emit saťahuje vlastné udalosti z dieťaťa komponentu. Je to hlavný spôsob, ako dieťa komponent komunikuje so svojím rodičom v Vue, v jednom smere toku dát. Umožňuje dieťaťu oznámiť rodičovi, že sa stalo nejaké udalosti, a v prípade potreby mu odovzdať dáta.
Princíp fungovania:
- V dieťaťu komponent
$emit('názovUdalosti', payload)sa volá.názovUdalosti- reťazec, názov udalosti, ktorá bude generovaná.payload(nepovinné) - akékoľvek dáta, ktoré chcete odovzdať rodičovskému komponentu.
- V rodičovskom komponente, pri použití dieťaťa komponentu, sa počúva táto udalosť pomocou direktívy
v-onalebo skrátenej formy@. - Keď je udalosť so zadaným názvom generovaná dieťaťom komponentom, vykoná sa príslušný handler v rodičovskom komponente.
Príklad:
Dieťa komponent (ChildComponent.vue):
<template>
<button @click="handleClick">Klikni na mňa</button>
</template>
<script>
export default {
methods: {
handleClick() {
// Generujeme udalosť 'buttonClicked' bez payload
this.$emit('buttonClicked');
}
}
}
</script>
Rodičovský komponent (ParentComponent.vue):
<template>
<!-- Počúvame udalosť 'buttonClicked' -->
<ChildComponent @buttonClicked="handleButtonClick" />
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent
},
methods: {
handleButtonClick() {
// Táto metóda sa vykoná, keď dieťaťo komponent vygeneruje 'buttonClicked'
console.log('Tlačidlo v dieťaťu bolo stlačené!');
}
}
}
</script>
$emit umožňuje zachovať princíp jednostranného toku dát, zabraňuje priamej zmene stavu rodiča zo strany dieťaťa. Dieťa len signalizuje, že sa niečo stalo, a spracovanie a zmena stavu sa vykonávajú v rodičovskom komponente.