Questa sembra una domanda abbastanza semplice ma non riesco a trovare una risposta definitiva (o addirittura funzionante).Vue.js - accesso ai dati dall'istanza root all'interno del componente
ho il mio esempio root:
var vm = new Vue({
el: '#app',
// Data
data: {
events: {}
},
// Methods
methods: {
fetchEvents: function(){
this.$http.get('/api/events').success(function(theseEvents) {
this.$set('events', theseEvents);
}).error(function(error) {
});
}
},
ready: function(){
this.fetchEvents();
}
});
e ho un componente separato in cui voglio elencare gli eventi memorizzati nell'istanza radice. Al momento appare così:
var EventsList = Vue.extend({
template: '<ul><li v-for="event in events"><h2>{{ event.title }}</h2><p>{{ event.body }}</p></li></ul>',
data: function(){
return {
events: {}
}
},
methods: {
syncEvents: function(){
this.$set('events', this.$parent.events);
}
},
// When ready...
ready: function(){
this.syncEvents();
}
}
Questo non sembra funzionare. Ho anche provato this.$root.events
senza alcun risultato. Qual è il modo corretto di fare questo? Tieni presente che voglio fare riferimento ai dati dalla radice, non creare una copia con un proprio ambito.
EDIT: cercando di utilizzare oggetti di scena, qui è la componente di lista, che è anche non funziona:
var EventsList = Vue.extend({
template: '<ul><li v-for="event in events"><h2>{{ event.title }}</h2><p>{{ event.body }}</p></li></ul>',
props: ['events']
}
Sei sicuro non vuoi usare la sincronizzazione bidirezionale con gli oggetti di scena? In questo modo, non dovresti accoppiare strettamente i due componenti. – nils
Mi dispiace, sono abbastanza nuovo per questo. Puoi spiegare cosa intendi? Inserisco gli eventi nell'istanza di root in quanto vorrò usarli in molti componenti lungo la linea. – Chris
Questi componenti cambieranno anche gli 'eventi 'o saranno di sola lettura? Ti spiegherò in un secondo – nils