Das scheint eine ziemlich grundlegende Frage zu sein, aber ich kann keine definitive (oder sogar funktionierende) Antwort finden.Vue.js - Zugangsdaten von der root-Instanz innerhalb der Komponente
Ich habe meine Rootinstanz:
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();
}
});
Und ich habe eine separate Komponente, in dem ich die Ereignisse auflisten wollen, die in der Stamminstanz gespeichert werden. Im Moment sieht es so aus:
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();
}
}
Dies scheint nicht zu funktionieren. Ich habe auch this.$root.events
vergeblich versucht. Was ist der richtige Weg? Bedenken Sie, dass ich die Daten von der Wurzel referenzieren möchte, nicht eine Kopie mit einem eigenen Umfang erstellen.
EDIT: versuchen, Requisiten zu verwenden, hier ist die Liste Komponente, die auch nicht funktioniert:
var EventsList = Vue.extend({
template: '<ul><li v-for="event in events"><h2>{{ event.title }}</h2><p>{{ event.body }}</p></li></ul>',
props: ['events']
}
Sind Sie sicher, Sie möchten keine Zwei-Wege-Synchronisierung mit Requisiten verwenden? Auf diese Weise müssten Sie die beiden Komponenten nicht fest koppeln. – nils
Entschuldigung, ich bin ziemlich neu dazu. Kannst du erklären, was du meinst? Ich lege die Ereignisse in die root-Instanz, da ich sie in vielen Komponenten auf der ganzen Linie verwenden möchte. – Chris
Ändern diese Komponenten auch die 'Ereignisse' oder sind sie schreibgeschützt? Ich werde es in einer Sekunde erklären. – nils