Composants Vue.js - Événements personnalisés
Les composants parents utilisent des props pour transmettre des données aux composants enfants, mais si un composant enfant doit renvoyer des données, des événements personnalisés sont nécessaires !
Nous pouvons utiliser v-on pour lier des événements personnalisés. Chaque instance Vue implémente l'interface d'événements (Events interface), c'est-à-dire :
- Utiliser
$on(eventName)Écouter les événements - Utiliser
$emit(eventName)Déclencher des événements
De plus, le composant parent peut utiliser v-on directement là où le composant enfant est utilisé pour écouter les événements déclenchés par le composant enfant.
Dans l'exemple suivant, le composant enfant est complètement découplé de l'extérieur. Tout ce qu'il fait, c'est déclencher un événement interne qui intéresse le composant parent.
Exemple
Essayez-le »
Si vous souhaitez écouter un événement natif sur l'élément racine d'un composant, vous pouvez utiliser le modificateur .native sur v-on. Par exemple :
<my-component v-on:click.native="doTheThing"></my-component>
data doit être une fonction
Dans l'exemple ci-dessus, vous pouvez voir que la propriété data du composant button-counter n'est pas un objet, mais une fonction :
data: function () {
return {
count: 0
}
}
L'avantage est que chaque instance peut maintenir une copie indépendante de l'objet retourné. Si data est un objet, cela affectera les autres instances, comme montré ci-dessous :
Exemple
Essayez-le »
v-model pour les composants personnalisés
Par défaut, v-model sur un composant utilise la prop nommée value et l'événement nommé input.
<input v-model="parentData">
Équivalent à :
<input
:value="parentData"
@input="parentData = $event.target.value"
>
Dans l'exemple suivant, le composant personnalisé example-input est défini. La valeur initiale de num dans le composant parent est 100. Modifier la valeur dans le composant enfant peut mettre à jour le num du composant parent en temps réel :
Exemple
Essayez-le »
Parce que v-model transmet value par défaut, et non checked, pour les composants de type case à cocher ou bouton radio, nous devons utiliser l'option model. L'option model peut spécifier le type d'événement actuel et les props transmises.
Exemple
Essayez-le »
Dans l'exemple, la valeur de lovingVue est passée à la prop checked, et lorsque <base-checkbox> déclenche l'événement change, la valeur de lovingVue est également mise à jour.
Autres extensions