Я намагаюся зрозуміти, як передавати дані між компонентами у vue.js. Я кілька разів перечитав документи та переглянув багато питань та підручників, пов'язаних з наукою, але досі не отримую.
Щоб обернути голову навколо цього, я сподіваюся на допомогу, заповнивши досить простий приклад
- відобразити список користувачів в одному компоненті (готово)
- надсилати дані користувача до нового компонента, коли клацне посилання (зроблено) - див. оновлення внизу.
- відредагуйте дані користувача та надішліть їх назад до оригінального компонента (ще далеко не дійшли)
Ось скрипка, яка не вдається на другому кроці: https://jsfiddle.net/retrogradeMT/d1a8hps0/
Я розумію, що мені потрібно використовувати реквізит для передачі даних новому компоненту, але я не впевнений, як функціонально це зробити. Як прив’язати дані до нового компонента?
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 для основного компонента:
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 для другого компонента:
Vue.component('newtemp', {
template: '#newtemp',
props: 'name',
data: function() {
return {
name: name,
}
},
})
ОНОВЛЕННЯ
Добре, я розгадав другий крок. Ось нова скрипка, що показує прогрес: https://jsfiddle.net/retrogradeMT/9pffnmjp/
Оскільки я використовую Vue-маршрутизатор, я не використовую реквізит для надсилання даних до нового компонента. Натомість мені потрібно встановити параметри на v-link, а потім використовувати перехідний гачок, щоб прийняти його.
Зміни V-link див. Названі маршрути в документах vue-router :
<a v-link="{ name: 'new', params: { name: user.name }}"> Show new component</a>
Потім на компоненті додайте дані до параметрів маршруту, див. Перехідні гачки :
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,
}
},
})