Это похоже на довольно простой вопрос, но я не могу найти окончательный (или даже рабочий) ответ.Vue.js - данные доступа из корневого экземпляра в компоненте
У меня есть корневой экземпляр:
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();
}
});
И у меня есть отдельный компонент, в котором я хочу перечислить события, которые хранятся в экземпляре корня. На данный момент это выглядит так:
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();
}
}
Это не работает. Я также пробовал this.$root.events
безрезультатно. Каков правильный способ этого? Имейте в виду, что я хочу ссылаться на данные из корня, а не создавать копию с ее собственной областью.
EDIT: пытаясь использовать реквизит, вот компонент списка, который также не работает:
var EventsList = Vue.extend({
template: '<ul><li v-for="event in events"><h2>{{ event.title }}</h2><p>{{ event.body }}</p></li></ul>',
props: ['events']
}
Вы уверены, вы не хотите использовать двустороннюю синхронизацию с реквизитами? Таким образом, вам не придется плотно связывать эти два компонента. – nils
Жаль, что я довольно новичок в этом. Можете ли вы объяснить, что вы имеете в виду? Я помещаю события в корневой экземпляр, так как хочу использовать их во многих компонентах в строке. – Chris
Изменит ли эти компоненты «события» или будет ли он доступен только для чтения? Я объясню через секунду. – nils