这似乎是一个相当基本的问题,但我似乎找不到明确的(甚至是有效的)答案。
我有我的根实例:
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
无济于事。解决这个问题的正确方法是什么?请记住,我想从根目录引用数据,而不是创建具有自己范围的副本。
编辑:尝试使用道具,这是列表组件,它也不起作用:
var EventsList = Vue.extend({
template: '<ul><li v-for="event in events"><h2>{{ event.title }}</h2><p>{{ event.body }}</p></li></ul>',
props: ['events']
}
原文由 Chris 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用
props
,您可以轻松地将相同的数据从父级传递给子级。由于我不知道您如何将根实例和EventList
链接在一起,因此我假设您将其注册为全局组件。该文档指出:
因此,当您将其作为道具传递时,您将在所有组件中使用相同的对象。
活动列表:
在根 vue 实例模板中,您可以将根 vue 实例
events
作为名为events
的属性传递给子组件: