Konteks
Dalam Vue 2.0 dokumentasi dan lainnya dengan jelas menunjukkan bahwa komunikasi dari orang tua ke anak terjadi melalui alat peraga.
Pertanyaan
Bagaimana orang tua memberi tahu anaknya bahwa suatu peristiwa telah terjadi melalui alat peraga?
Haruskah saya menonton acara yang disebut prop? Itu tidak terasa benar, juga tidak ada alternatif ( $emit
/ $on
untuk anak ke orang tua, dan model hub untuk elemen yang jauh).
Contoh
Saya memiliki wadah induk dan perlu memberi tahu wadah anaknya bahwa tidak apa-apa untuk melakukan tindakan tertentu pada API. Saya harus dapat memicu fungsi.
javascript
vue.js
event-handling
vuejs2
sangat
sumber
sumber
ref
alih-alih membuat prop, yang menonton nilainya kemudian memancarkannya ke fungsi lain di induk? Maksud saya memang ada banyak hal yang harus dilakukan, tetapi apakah menggunakanref
bahkan aman? Terima kasihref
aman. Secara umum, ini tidak disarankan karena komunitas Vue lebih suka memberikan status kepada anak-anak, dan acara kembali kepada orang tua. Secara umum, ini mengarah pada komponen yang lebih terisolasi, konsisten secara internal (hal yang baik ™). Tetapi, jika informasi yang Anda sampaikan kepada anak itu benar-benar suatu peristiwa (atau perintah), mengubah status bukanlah pola yang tepat. Dalam hal itu, memanggil metode menggunakanref
benar-benar baik, dan itu tidak akan crash atau apa pun.Apa yang Anda gambarkan adalah perubahan status pada orang tua. Anda memberikannya kepada anak melalui alat peraga. Seperti yang Anda sarankan, Anda akan
watch
mendukung itu. Ketika anak mengambil tindakan, ia memberi tahu orang tua melaluiemit
, dan orang tua kemudian dapat mengubah negara lagi.Tampilkan cuplikan kode
Jika Anda benar-benar ingin memberikan acara kepada seorang anak, Anda dapat melakukannya dengan membuat bus (yang hanya merupakan contoh Vue) dan memberikannya kepada anak sebagai penyangga .
sumber
v-model
pada komponen, Anda juga dapat dengan mudah mengatur ulang nilainya dengan memancarkan peristiwa yang sesuai dengan kode yang lebih sedikit.prop
pada anak, properti tambahan didata
, lalu menambahkanwatch
... Akan nyaman jika ada dukungan bawaan untuk entah bagaimana mentransfer acara dari orangtua ke anak. Situasi ini cukup sering terjadi.Anda bisa menggunakan
$emit
dan$on
. Menggunakan kode @RoyJ:html:
javascript:
Contoh menjalankan: https://jsfiddle.net/rjurado/m2spy60r/1/
sumber
Jika Anda punya waktu, gunakan Vuex store untuk menonton variabel (alias status) atau memicu (alias mengirim) tindakan secara langsung.
sumber
Tidak suka pendekatan event-bus menggunakan
$on
binding pada anak selamacreate
. Mengapa?create
Panggilan selanjutnya (Saya menggunakanvue-router
) mengikat pawang pesan lebih dari sekali - mengarah ke beberapa respons per pesan.Solusi ortodoks dari menurunkan alat peraga dari orangtua ke anak dan menempatkan pengamat properti pada anak itu sedikit berhasil lebih baik. Satu-satunya masalah adalah bahwa anak hanya dapat bertindak pada transisi nilai. Melewati pesan yang sama beberapa kali membutuhkan semacam pembukuan untuk memaksakan transisi agar anak dapat mengambil perubahan.
Saya telah menemukan bahwa jika saya membungkus pesan dalam sebuah array, itu akan selalu memicu pengamat anak - bahkan jika nilainya tetap sama.
Induk:
Anak:
HTML:
sumber
Cara sederhana dipisahkan untuk memanggil metode pada komponen anak adalah dengan memancarkan handler dari anak dan kemudian memohonnya dari orang tua.
Orang tua melacak fungsi penangan anak dan panggilan bila perlu.
sumber
Contoh di bawah ini cukup jelas. di mana referensi dan acara dapat digunakan untuk memanggil fungsi dari dan ke orangtua dan anak.
sumber
Saya pikir kita harus memiliki pertimbangan tentang perlunya orang tua untuk menggunakan metode anak. Bahkan, orang tua tidak perlu memperhatikan metode anak, tetapi dapat memperlakukan komponen anak sebagai FSA (mesin keadaan terbatas). Komponen orangtua untuk mengontrol keadaan komponen anak. Jadi solusi untuk menonton perubahan status atau hanya menggunakan fungsi komputasi sudah cukup
sumber
Anda dapat menggunakan kunci untuk memuat ulang komponen anak menggunakan kunci
Jika Anda ingin memuat ulang komponen dengan filter baru, jika klik tombol filter komponen anak
dan gunakan filter untuk memicu fungsi
sumber