Zgadzam się z emisją zdarzenia i odpowiedziami v-model dla tych powyżej. Pomyślałem jednak, że opublikuję to, co znalazłem o komponentach z wieloma elementami formularza, które chcą wyemitować z powrotem do swojego rodzica, ponieważ wydaje się, że jest to jeden z pierwszych artykułów zwróconych przez Google.
Wiem, że pytanie dotyczy pojedynczego wejścia, ale wydawało się, że jest to najbliższe dopasowanie i może zaoszczędzić ludziom trochę czasu dzięki podobnym komponentom vue. Ponadto nikt jeszcze nie wspomniał o .sync
modyfikatorze.
O ile wiem, v-model
rozwiązanie jest odpowiednie tylko dla jednego wejścia powracającego do rodzica. Poszukiwanie tego zajęło mi trochę czasu, ale dokumentacja Vue (2.3.0) pokazuje, jak zsynchronizować wiele właściwości wysyłanych do komponentu z powrotem do elementu nadrzędnego (oczywiście przez emitowanie).
Właściwie nazywa się to .sync
modyfikatorem.
Oto, co mówi dokumentacja :
W niektórych przypadkach możemy potrzebować „dwukierunkowego wiązania” rekwizytu. Niestety, prawdziwe dwukierunkowe wiązanie może powodować problemy z utrzymaniem, ponieważ komponenty potomne mogą mutować rodzica bez źródła tej mutacji, które jest oczywiste zarówno u rodzica, jak i dziecka.
Dlatego zamiast tego zalecamy emitowanie zdarzeń w formacie
update:myPropName
. Na przykład w hipotetycznym komponencie z
title
rekwizytem moglibyśmy zakomunikować zamiar przypisania nowej wartości za pomocą:
this.$emit('update:title', newTitle)
Następnie rodzic może nasłuchiwać tego zdarzenia i aktualizować lokalną właściwość danych, jeśli chce. Na przykład:
<text-document
v-bind:title="doc.title"
v-on:update:title="doc.title = $event"
></text-document>
Dla wygody oferujemy skrót dla tego wzorca z modyfikatorem .sync:
<text-document v-bind:title.sync="doc.title"></text-document>
Możesz także zsynchronizować wiele na raz, wysyłając przez obiekt. Sprawdź dokumentację tutaj