Vue deseni propsaşağı veevents yukarı. Kulağa basit geliyor, ancak özel bir bileşen yazarken unutması kolay.
Vue 2.2.0'dan itibaren v-modelini ( hesaplanan özelliklere sahip ) kullanabilirsiniz. Bu kombinasyonun bileşenler arasında basit, temiz ve tutarlı bir arayüz oluşturduğunu gördüm:
propsBileşeninize iletilen herhangi bir reaktif kalır (yani, klonlanmamıştır ve watchdeğişiklikler algılandığında yerel bir kopyayı güncellemek için bir işlev gerektirmez ).
- Değişiklikler otomatik olarak üst öğeye gönderilir.
- Çok sayıda bileşenle kullanılabilir.
Hesaplanan özellik ayarlayıcı ve alıcıyı ayrı ayrı tanımlamanıza izin verir. Bu, Taskbileşenin aşağıdaki gibi yeniden yazılmasına izin verir :
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)
}
}
}
})
Model özelliği tanımlar propile ilişkilidir v-model, ve olay değişiklikleri yayılacaktır. Daha sonra bu bileşeni üst öğeden aşağıdaki gibi çağırabilirsiniz:
<Task v-model="parentList"></Task>
listLocalBilgisayarlı mülkiyet bileşeni içinde basit bir alıcı ve ayarlayıcı arayüz sağlar (özel değişken olmak gibi düşünün). İçinde #task-templaterender yapabilirsiniz listLocalve reaktif kalacaktır (yani, eğer parentListdeğişiklikler yapılırsa Taskbileşeni güncelleyecektir ). Ayrıca değişebilirlistLocal ayarlayıcıyı (örn. this.listLocal = newList) ve üst öğeye değişiklik gönderir.
Bu modelin en güzel yanı, listLocalbir alt öğeye geçebilmenizdir .Task (kullanım v-model) değişikliklerin en üst düzey bileşene yayılmasıdır.
Örneğin EditTask, görev verilerinde bir tür değişiklik yapmak için ayrı bir bileşenimiz olduğunu varsayalım. Aynı v-modelve hesaplanmış özellikler desenini listLocalkullanarak bileşene geçebiliriz (kullanarak v-model):
<script type="text/x-template" id="task-template">
<div>
<EditTask v-model="listLocal"></EditTask>
</div>
</script>
Eğer EditTaskyayar uygun şekilde arayacak bir değişiklik set()üzerinde listLocalüst seviyeye olayı yaymak böylece ve. Benzer şekilde, EditTaskbileşen aynı zamanda diğer alt bileşenleri (form öğeleri gibi) kullanarak da çağırabilir v-model.