vuejs v2.0 向组件传递数据
vuejs v2.0 pass data to component
我使用 vue.js 在 Laravel 5.3 上构建了一个应用程序,我开始转向 vue.js 以使页面动态化。我在一个页面上完成了所有工作,所以想将其转换为一个组件,但在这样做之后我收到以下错误:
[Vue warn]: Error when rendering component <homepage> at C:\xampp\htdocs\.......
TypeError: Cannot read property 'nxt_weekly' of undefined
我像这样将数据传递给视图:
const app = new Vue({
el: '#app',
mounted: function () {
this.fetchEvents();
},
data: {
loading: true,
stats: []
},
methods: {
fetchEvents: function () {
this.$http.get('home/data').then(function (response) {
this.stats = response.body;
this.loading = false;
}, function (error) {
console.log(error);
});
}
});
在 stats[] 中,我保存来自 API 的 JSON 响应,然后在我的视图中将它们全部调用,如下所示:
<span class="stat" v-text="'stats.nxt_today'"></span>
....
....
这有效,但是当我切换到创建组件时,上面列出的错误显示,我的新代码是:
Vue.component('homepage', require('./components/Homepage.vue'),{
mounted: function () {
this.fetchEvents();
},
data: function () {
return{
loading: true,
stats: []
}
},
methods: {
fetchEvents: function () {
console.log('running here');
this.$http.get('home/data').then(function (response) {
this.stats = response.body;
this.loading = false;
}, function (error) {
console.log(error);
});
}
}
});
我做错了什么?为什么我的 stats[] 对象在组件尝试访问它时现在是空的?
您需要将 stats
作为 属性 传递给使用 v-bind
的组件,如下所示:
<homepage v-bind:stats="stats"></homepage>
以上需要在您的根模板中完成。在您的 homepage
组件中,您可以按如下方式接收 props
中的值:
Vue.component('homepage', {
props: ["stats"],
mounted: function () {
// ...
},
// ...
}
在该组件的模板中,您将能够正常访问stats.nxt_today
。
顺便问一下,你的统计数据是数组还是对象?您最初将其定义为空数组,但将其作为对象访问。
如果仍有问题,您可以使用 vue-devtools 查看组件中所有可用的对象。
我使用 vue.js 在 Laravel 5.3 上构建了一个应用程序,我开始转向 vue.js 以使页面动态化。我在一个页面上完成了所有工作,所以想将其转换为一个组件,但在这样做之后我收到以下错误:
[Vue warn]: Error when rendering component <homepage> at C:\xampp\htdocs\.......
TypeError: Cannot read property 'nxt_weekly' of undefined
我像这样将数据传递给视图:
const app = new Vue({
el: '#app',
mounted: function () {
this.fetchEvents();
},
data: {
loading: true,
stats: []
},
methods: {
fetchEvents: function () {
this.$http.get('home/data').then(function (response) {
this.stats = response.body;
this.loading = false;
}, function (error) {
console.log(error);
});
}
});
在 stats[] 中,我保存来自 API 的 JSON 响应,然后在我的视图中将它们全部调用,如下所示:
<span class="stat" v-text="'stats.nxt_today'"></span>
....
....
这有效,但是当我切换到创建组件时,上面列出的错误显示,我的新代码是:
Vue.component('homepage', require('./components/Homepage.vue'),{
mounted: function () {
this.fetchEvents();
},
data: function () {
return{
loading: true,
stats: []
}
},
methods: {
fetchEvents: function () {
console.log('running here');
this.$http.get('home/data').then(function (response) {
this.stats = response.body;
this.loading = false;
}, function (error) {
console.log(error);
});
}
}
});
我做错了什么?为什么我的 stats[] 对象在组件尝试访问它时现在是空的?
您需要将 stats
作为 属性 传递给使用 v-bind
的组件,如下所示:
<homepage v-bind:stats="stats"></homepage>
以上需要在您的根模板中完成。在您的 homepage
组件中,您可以按如下方式接收 props
中的值:
Vue.component('homepage', {
props: ["stats"],
mounted: function () {
// ...
},
// ...
}
在该组件的模板中,您将能够正常访问stats.nxt_today
。
顺便问一下,你的统计数据是数组还是对象?您最初将其定义为空数组,但将其作为对象访问。
如果仍有问题,您可以使用 vue-devtools 查看组件中所有可用的对象。