Pola Vue propsturun dan eventsnaik. Kedengarannya sederhana, tetapi mudah dilupakan saat menulis komponen khusus.
Pada Vue 2.2.0 Anda dapat menggunakan model-v (dengan properti yang dihitung ). Saya telah menemukan kombinasi ini menciptakan antarmuka yang sederhana, bersih, dan konsisten antara komponen:
- Apa pun yang
propsditeruskan ke komponen Anda tetap reaktif (yaitu, itu tidak dikloning juga tidak memerlukan watchfungsi untuk memperbarui salinan lokal ketika perubahan terdeteksi).
- Perubahan secara otomatis dipancarkan ke induk.
- Dapat digunakan dengan berbagai tingkatan komponen.
Properti yang dikomputasi memungkinkan penyetel dan pengambil ditetapkan secara terpisah. Ini memungkinkan Taskkomponen untuk ditulis ulang sebagai berikut:
Vue.component('Task', {
template: '#task-template',
props: ['list'],
model: {
prop: 'list',
event: 'listchange'
},
computed: {
listLocal: {
get: function() {
return this.list
},
set: function(value) {
this.$emit('listchange', value)
}
}
}
})
The Model mendefinisikan properti yang propberhubungan dengan v-model, dan yang acara akan dipancarkan pada perubahan. Anda kemudian dapat memanggil komponen ini dari induknya sebagai berikut:
<Task v-model="parentList"></Task>
The listLocalproperti dihitung menyediakan getter dan setter antarmuka yang sederhana dalam komponen (berpikir itu seperti berada variabel pribadi). Di dalam #task-templateAnda dapat membuat listLocaldan itu akan tetap reaktif (yaitu, jika parentListperubahan itu akan memperbarui Taskkomponen). Anda juga dapat bermutasi listLocaldengan memanggil setter (mis., this.listLocal = newList) Dan itu akan memancarkan perubahan ke induk.
Apa yang hebat tentang pola ini adalah Anda dapat beralih listLocalke komponen anak dari Task(menggunakan v-model), dan perubahan dari komponen anak akan menyebar ke komponen tingkat atas.
Misalnya, kita memiliki EditTaskkomponen terpisah untuk melakukan beberapa jenis modifikasi pada data tugas. Dengan menggunakan v-modelpola properti yang sama dan dikomputasi, kita dapat beralih listLocalke komponen (menggunakan v-model):
<script type="text/x-template" id="task-template">
<div>
<EditTask v-model="listLocal"></EditTask>
</div>
</script>
Jika EditTaskmemancarkan perubahan dengan tepat akan memanggil set()pada listLocaldan dengan demikian menyebarkan acara ke tingkat atas. Demikian pula, EditTaskkomponen juga bisa memanggil komponen anak lainnya (seperti elemen formulir) menggunakan v-model.