Vue.js'deki bileşenler arasında verilerin nasıl aktarılacağını anlamakta zorlanıyorum. Dokümanları birkaç kez okudum ve vue ile ilgili birçok soruya ve öğreticiye baktım, ancak yine de anlamıyorum.
Kafamı bu konuya kaptırmak için, oldukça basit bir örneği tamamlamak için yardım almayı umuyorum.
- bir bileşendeki kullanıcıların listesini görüntüle (tamamlandı)
- Bir bağlantı tıklandığında (tamamlandığında) kullanıcı verilerini yeni bir bileşene gönderin - alttaki güncellemeye bakın.
- kullanıcı verilerini düzenleyin ve orijinal bileşene geri gönderin (şimdiye kadar ulaşmadınız)
İşte ikinci adımda başarısız olan bir keman: https://jsfiddle.net/retrogradeMT/d1a8hps0/
Verileri yeni bileşene aktarmak için props kullanmam gerektiğini anlıyorum, ancak bunu işlevsel olarak nasıl yapacağımdan emin değilim. Verileri yeni bileşene nasıl bağlarım?
HTML:
<div id="page-content">
<router-view></router-view>
</div>
<template id="userBlock" >
<ul>
<li v-for="user in users">{{user.name}} - <a v-link="{ path: '/new' }"> Show new component</a>
</li>
</ul>
</template>
<template id="newtemp" :name ="{{user.name}}">
<form>
<label>Name: </label><input v-model="name">
<input type="submit" value="Submit">
</form>
</template>
ana bileşen için js:
Vue.component('app-page', {
template: '#userBlock',
data: function() {
return{
users: []
}
},
ready: function () {
this.fetchUsers();
},
methods: {
fetchUsers: function(){
var users = [
{
id: 1,
name: 'tom'
},
{
id: 2,
name: 'brian'
},
{
id: 3,
name: 'sam'
},
];
this.$set('users', users);
}
}
})
İkinci bileşen için JS:
Vue.component('newtemp', {
template: '#newtemp',
props: 'name',
data: function() {
return {
name: name,
}
},
})
GÜNCELLEME
Tamam, ikinci adımı anladım. İşte ilerlemeyi gösteren yeni bir keman: https://jsfiddle.net/retrogradeMT/9pffnmjp/
Vue-yönlendirici kullandığım için, verileri yeni bir bileşene göndermek için props kullanmıyorum. Bunun yerine, v-link üzerinde parametreler ayarlamam ve bunu kabul etmek için bir geçiş kancası kullanmam gerekiyor.
V-link değişiklikleri , vue-router belgelerinde adlandırılmış rotalara bakın :
<a v-link="{ name: 'new', params: { name: user.name }}"> Show new component</a>
Ardından bileşen üzerinde, rota seçeneklerine veri ekleyin, bkz. Geçiş kancaları :
Vue.component('newtemp', {
template: '#newtemp',
route: {
data: function(transition) {
transition.next({
// saving the id which is passed in url
name: transition.to.params.name
});
}
},
data: function() {
return {
name:name,
}
},
})