Ich bin mit den Ereignisausgabe- und V-Modell-Antworten für die oben genannten einverstanden. Ich dachte jedoch, ich würde veröffentlichen, was ich über Komponenten mit mehreren Formularelementen gefunden habe, die an ihre übergeordneten Elemente zurückgegeben werden sollen, da dies einer der ersten von Google zurückgegebenen Artikel zu sein scheint.
Ich weiß, dass die Frage eine einzelne Eingabe spezifiziert, aber dies schien die engste Übereinstimmung zu sein und könnte Menschen mit ähnlichen Vue-Komponenten Zeit sparen. Auch hat der .sync
Modifikator noch niemand erwähnt .
Soweit ich weiß, ist die v-model
Lösung nur für eine Eingabe geeignet, die an die übergeordnete Person zurückkehrt. Ich habe ein bisschen Zeit gebraucht, um danach zu suchen, aber die Dokumentation zu Vue (2.3.0) zeigt, wie mehrere in die Komponente gesendete Requisiten wieder an die übergeordnete Komponente synchronisiert werden (natürlich über Emit).
Es wird entsprechend als .sync
Modifikator bezeichnet.
In der Dokumentation heißt es:
In einigen Fällen benötigen wir möglicherweise eine „Zwei-Wege-Bindung“ für eine Requisite. Leider kann eine echte bidirektionale Bindung zu Wartungsproblemen führen, da untergeordnete Komponenten das übergeordnete Element mutieren können, ohne dass die Quelle dieser Mutation sowohl für das übergeordnete Element als auch für das untergeordnete Element offensichtlich ist.
Aus diesem Grund empfehlen wir stattdessen, Ereignisse im Muster von zu senden
update:myPropName
. Zum Beispiel title
könnten wir in einer hypothetischen Komponente mit einer
Requisite die Absicht, einen neuen Wert zuzuweisen, kommunizieren mit:
this.$emit('update:title', newTitle)
Dann kann der Elternteil dieses Ereignis abhören und eine lokale Dateneigenschaft aktualisieren, wenn er möchte. Beispielsweise:
<text-document
v-bind:title="doc.title"
v-on:update:title="doc.title = $event"
></text-document>
Der Einfachheit halber bieten wir eine Abkürzung für dieses Muster mit dem Modifikator .sync an:
<text-document v-bind:title.sync="doc.title"></text-document>
Sie können auch mehrere gleichzeitig synchronisieren, indem Sie ein Objekt senden. Lesen Sie hier die Dokumentation