Non riesco a capire come passare i dati tra i componenti in vue.js. Ho letto più volte i documenti e ho esaminato molte domande e tutorial relativi a Vue, ma non riesco ancora a ottenerlo.Passaggio dei dati ai componenti in vue.js
di avvolgere la mia testa intorno a questo, spero in aiuto il completamento di un piuttosto semplice esempio
- visualizzare un elenco di utenti in un solo componente (fatto)
- inviare i dati utente in un nuovo componente quando viene fatto clic su un collegamento (fatto) - vedi aggiornamento in fondo.
- modificare i dati degli utenti e rinviarlo al componente originale (non hanno ottenuto fino a questo punto)
Ecco un violino, che non riesce a passo due: https://jsfiddle.net/retrogradeMT/d1a8hps0/
ho capito che ho bisogno di usare oggetti di scena per passare i dati al nuovo componente, ma non sono sicuro di come farlo funzionalmente. Come legare i dati al nuovo componente?
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 per il componente principale:
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 per seconda componente:
Vue.component('newtemp', {
template: '#newtemp',
props: 'name',
data: function() {
return {
name: name,
}
},
})
UPDATE
Ok, ho capito il secondo passo. Ecco un nuovo violino che mostra i progressi: https://jsfiddle.net/retrogradeMT/9pffnmjp/
Perché sto usando Vue-router, non uso oggetti di scena per inviare i dati a un nuovo componente. Invece, ho bisogno di impostare i parametri sul v-link e quindi utilizzare un hook di transizione per accettarlo.
V-link cambia see named routes in vue-router docs:
<a v-link="{ name: 'new', params: { name: user.name }}"> Show new component</a>
Poi sul componente, aggiungere dati al opzioni di percorso see transition hooks:
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,
}
},
})
Grazie, è stato davvero utile. L'unico pezzo con cui sto ancora combattendo è la denominazione delle convenzioni. io: ho user.name che passo tramite v-link come nome. Ora posso modificare la variabile name e passarla di nuovo al componente originale come nome, ma il componente originale non ha una var chiamata name. Cosa mi manca qui? Non sembra possibile passare un oggetto tramite v-link? – retrograde
Stai già passando un oggetto. 'params' è un oggetto. La chiave del nome può essere assegnata a 'this.user.name' nel componente. Crea un violino se hai bisogno di aiuto e fammi sapere. Controlla questo: http://vuejs.github.io/vue-router/en/route.html – notANerdDev
Ah, ok ho capito ora. Grazie ancora. Apprezzo il tuo aiuto, ha reso le cose molto più chiare. – retrograde