Ich habe Probleme zu verstehen, wie Daten zwischen Komponenten in vue.js übertragen werden. Ich habe die Dokumente mehrmals durchgelesen und mir viele Fragen und Tutorials zum Thema Vue angesehen, aber ich verstehe sie immer noch nicht.
Um dies in den Kopf zu bekommen, hoffe ich auf Hilfe bei der Vervollständigung eines ziemlich einfachen Beispiels
- eine Liste der Benutzer in einer Komponente anzeigen (fertig)
- Senden Sie die Benutzerdaten an eine neue Komponente, wenn Sie auf einen Link klicken (fertig) - siehe Update unten.
- Benutzerdaten bearbeiten und an die Originalkomponente zurücksenden (noch nicht so weit)
Hier ist eine Geige, die in Schritt zwei fehlschlägt: https://jsfiddle.net/retrogradeMT/d1a8hps0/
Ich verstehe, dass ich Requisiten verwenden muss, um Daten an die neue Komponente zu übergeben, bin mir aber nicht sicher, wie ich das funktional tun soll. Wie binde ich die Daten an die neue Komponente?
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 für Hauptkomponente:
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 für die zweite Komponente:
Vue.component('newtemp', {
template: '#newtemp',
props: 'name',
data: function() {
return {
name: name,
}
},
})
AKTUALISIEREN
Ok, ich habe den zweiten Schritt herausgefunden. Hier ist eine neue Geige, die den Fortschritt zeigt: https://jsfiddle.net/retrogradeMT/9pffnmjp/
Da ich einen Vue-Router verwende, verwende ich keine Requisiten, um die Daten an eine neue Komponente zu senden. Stattdessen muss ich Parameter für den V-Link festlegen und dann einen Übergangshaken verwenden, um ihn zu akzeptieren.
V-Link-Änderungen siehe benannte Routen in den Vue-Router-Dokumenten :
<a v-link="{ name: 'new', params: { name: user.name }}"> Show new component</a>
Fügen Sie dann auf der Komponente Daten zu den Routenoptionen hinzu, siehe Übergangshooks :
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,
}
},
})