【发布时间】:2016-12-19 05:25:16
【问题描述】:
我正在尝试制作一个使用 vue.js 和 chart.js 绘制潮汐数据的应用程序。
我使用 axios 从 Wunderground API 获取数据,将其格式化为 chart.js,然后使用 props 将其传递给组件以绘制图表。但是,当我最初加载页面时,会加载一个空白图表。在调整窗口大小或切换数据集时,数据会正确显示。
我读过Chart.js will not render using vue.js until window resizes,它描述了一个类似的问题,但与那个问题不同的是,我的画布可以正确渲染。问题只是数据集。
我尝试在不使用 API 的情况下通过 props 传递数据,效果很好。
折线图组件
export default {
name: 'LineChart',
props: ['data', 'options'],
mounted() {
let ctx = document.getElementById('chart').getContext('2d')
let chart = new Chart(ctx, {
type: 'line',
data: this.data,
options: this.options
})
}
}
应用组件
export default {
name: 'app',
data() {
return {
url: 'http://api.wunderground.com/api/f219964b4d6ec312/tide/q/autoip.json',
chartData: {
labels: [],
datasets: [
{
label: 'Tide',
data: []
}
]
},
chartOptions: {
responsive: true,
scales: {
xAxes: [{
type: 'time',
}]
}
}
}
},
components: {
LineChart
},
created() {
this.getWeatherData()
},
methods: {
getWeatherData() {
axios.get(this.url).then((response) => {
response.data.tide.tideSummary.filter(this.isTideData).forEach((obj) => {
let d = new Date(0)
d.setUTCSeconds(obj.date.epoch)
this.chartData.labels.push(d)
this.chartData.datasets[0].data.push(parseFloat(obj.data.height))
})
})
},
isTideData(obj) {
return (obj.data.type == "Low Tide" || obj.data.type == "High Tide")
}
}
}
我做错了什么?
【问题讨论】: