J'ai du mal à comprendre comment transmettre des données entre les composants dans vue.js. J'ai lu plusieurs fois la documentation et examiné de nombreuses questions et didacticiels liés à la vue, mais je ne comprends toujours pas.
Pour comprendre cela, j'espère obtenir de l'aide pour compléter un exemple assez simple
- afficher une liste d'utilisateurs dans un composant (terminé)
- envoyer les données utilisateur à un nouveau composant lorsqu'un lien est cliqué (terminé) - voir mise à jour en bas.
- modifier les données utilisateur et les renvoyer au composant d'origine (je ne suis pas arrivé jusqu'ici)
Voici un violon, qui échoue à la deuxième étape: https://jsfiddle.net/retrogradeMT/d1a8hps0/
Je comprends que je dois utiliser des accessoires pour transmettre des données au nouveau composant, mais je ne sais pas comment le faire fonctionnellement. Comment lier les données au nouveau composant?
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 pour le composant principal:
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 pour le deuxième composant:
Vue.component('newtemp', {
template: '#newtemp',
props: 'name',
data: function() {
return {
name: name,
}
},
})
MISE À JOUR
Ok, j'ai compris la deuxième étape. Voici un nouveau violon montrant la progression: https://jsfiddle.net/retrogradeMT/9pffnmjp/
Parce que j'utilise Vue-router, je n'utilise pas d'accessoires pour envoyer les données à un nouveau composant. Au lieu de cela, j'ai besoin de définir des paramètres sur le lien v, puis d'utiliser un hook de transition pour l'accepter.
Les changements de V-link voient les routes nommées dans la documentation vue-router :
<a v-link="{ name: 'new', params: { name: user.name }}"> Show new component</a>
Puis sur le composant, ajoutez des données aux options d'itinéraire voir les crochets de transition :
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,
}
},
})