Saya kesulitan memahami cara melewatkan data antar komponen di vue.js. Saya telah membaca dokumen beberapa kali dan melihat banyak pertanyaan dan tutorial yang berhubungan dengan vue, tetapi saya masih belum mengerti.
Untuk menyelesaikan masalah ini, saya mengharapkan bantuan untuk menyelesaikan contoh yang cukup sederhana
- menampilkan daftar pengguna dalam satu komponen (selesai)
- mengirim data pengguna ke komponen baru ketika tautan diklik (selesai) - lihat pembaruan di bagian bawah.
- edit data pengguna dan kirim kembali ke komponen asli (belum sampai sejauh ini)
Ini biola, yang gagal pada langkah kedua: https://jsfiddle.net/retrogradeMT/d1a8hps0/
Saya memahami bahwa saya perlu menggunakan alat peraga untuk mengirimkan data ke komponen baru, tetapi saya tidak yakin bagaimana cara melakukannya secara fungsional. Bagaimana cara mengikat data ke komponen baru?
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>
js untuk komponen utama:
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);
}
}
})
JS untuk komponen kedua:
Vue.component('newtemp', {
template: '#newtemp',
props: 'name',
data: function() {
return {
name: name,
}
},
})
MEMPERBARUI
Oke, saya sudah mengetahui langkah kedua. Ini biola baru yang menunjukkan kemajuan: https://jsfiddle.net/retrogradeMT/9pffnmjp/
Karena saya menggunakan Vue-router, saya tidak menggunakan props untuk mengirim data ke komponen baru. Sebagai gantinya, saya perlu mengatur params pada v-link dan kemudian menggunakan hook transisi untuk menerimanya.
Perubahan V-link lihat rute bernama di dokumen vue-router :
<a v-link="{ name: 'new', params: { name: user.name }}"> Show new component</a>
Kemudian pada komponen, tambahkan data ke opsi rute, lihat pengait transisi :
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,
}
},
})