Je suis d'accord avec l'émission d'événements et les réponses du modèle v pour ceux ci-dessus. Cependant, j'ai pensé publier ce que j'ai trouvé sur les composants avec plusieurs éléments de formulaire qui veulent être renvoyés à leur parent, car cela semble l'un des premiers articles renvoyés par Google.
Je sais que la question spécifie une seule entrée, mais cela semblait la correspondance la plus proche et pourrait faire gagner du temps aux gens avec des composants de vue similaires. De plus, personne n'a encore mentionné le .sync
modificateur.
Autant que je sache, la v-model
solution n'est adaptée qu'à une seule entrée retournant à leur parent. J'ai mis un peu de temps à le chercher, mais la documentation de Vue (2.3.0) montre comment synchroniser plusieurs accessoires envoyés dans le composant au parent (via emit bien sûr).
Il est appelé à .sync
juste titre le modificateur.
Voici ce que dit la documentation :
Dans certains cas, nous pouvons avoir besoin d'une «liaison bidirectionnelle» pour un accessoire. Malheureusement, une véritable liaison bidirectionnelle peut créer des problèmes de maintenance, car les composants enfants peuvent muter le parent sans que la source de cette mutation soit évidente à la fois chez le parent et l'enfant.
C'est pourquoi à la place, nous vous recommandons d'émettre des événements dans le modèle de
update:myPropName
. Par exemple, dans un composant hypothétique avec un
title
accessoire, nous pourrions communiquer l'intention d'attribuer une nouvelle valeur avec:
this.$emit('update:title', newTitle)
Ensuite, le parent peut écouter cet événement et mettre à jour une propriété de données locales, s'il le souhaite. Par exemple:
<text-document
v-bind:title="doc.title"
v-on:update:title="doc.title = $event"
></text-document>
Pour plus de commodité, nous proposons un raccourci pour ce modèle avec le modificateur .sync:
<text-document v-bind:title.sync="doc.title"></text-document>
Vous pouvez également synchroniser plusieurs à la fois en envoyant via un objet. Consultez la documentation ici