这是json响应的样子[[61,57,34],[1,1,3]]
我想用第一个数组来存放标签,第二个数组来存放数据。
如果我在app
中手动设置labels and data
,它仍然有效。
例如labels: ["q", "w", "e"]
data: [1, 5, 10]
Vue.component('chart', {
props: ['labels', 'data', 'type'],
template: `
<canvas style="width: 512px; height: 256px"></canvas>
`,
mounted: function () {
new Chart(this.$el, {
type: this.type,
data: {
labels: this.labels,
datasets: [{
label: '# of Votes',
data: this.data,
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
})
}
});
new Vue({
el: '#app',
data: {
message: "test",
labels: [],
data: []
},
methods: {
fetchData: function() {
this.$http.get('/admin/fetch_data').then(res => {
this.labels = res.body[0];
this.data = res.body[1];
})
}
},
beforeMount() {
this.fetchData()
}
});
页面上的组件
<div id="app">
{{message}}
<chart :labels="labels" :data="data" type="bar"></chart>
</div>
数据似乎已加载,但页面上没有条形图。
1条答案
按热度按时间jaxagkaj1#
问题是当你正在执行一个异步任务来获取你的数据时,你的数据还没有被获取。到那时,组件的挂载钩子会被空的props调用,因为你作为props传递的数据还没有被加载。
所以这样做:
html格式
loaded
,并将其作为prop传递ths.$http.get()
请求返回的promise的成功回调中,将loaded
更改为true
chart
组件中设置一个监视器来监视这个loaded
属性loaded
属性changes to
为真时调用drawChart
方法'