我正在使用vue.js和chart.js为一些加密投资组合开发可视化模块,但我目前仍坚持这个:
显示空图表,但不呈现值。
由于在初始化图表后动态加载了值,我认为图表没有正确更新(即使我调用了.update()),但是没有显示任何错误。
我将chart.js渲染包装在vue组件中:
Vue.component('portfolioValues', {
template: '<canvas width="400" height="200"></canvas>',
data: function() {
return {
portfolio_value: [],
portfolio_labels: [],
chart: null,
}
},
methods: {
load_portfolio_value_local: function() {
values = [];
labels = []
local_data.forEach(element => {
values.push(element.total_usd);
labels.push(moment(element.timestamp, 'X'));
});
this.portfolio_value = values;
this.portfolio_labels = labels;
this.chart.update();
},
render_chart: function() {
this.chart = new Chart(this.$el, {
type: 'line',
data: {
labels: this.portfolio_labels,
datasets: [{
label: "Portfolio Value",
data: this.portfolio_value,
}]
},
options: {
scales: {
xAxes: [{
type: 'time',
distribution: 'linear',
}]
}
}
});
}
},
mounted: function() {
this.render_chart();
this.load_portfolio_value_local();
}
});
出于演示目的,我刚刚在本地添加了一些数据,如下所示:
local_data = [{
"timestamp": 1515102737,
"total_btc": 0.102627448096786,
"total_usd": 1539.41274772627
}, {
"timestamp": 1515102871,
"total_btc": 0.102636926127186,
"total_usd": 1538.52649627725
}, {
"timestamp": 1515103588,
"total_btc": 0.102627448096786,
"total_usd": 1532.33042753311
}
]
以下是完整的演示代码:https://codepen.io/perelin/pen/mppbxV
为什么没有数据呈现的任何想法? THX!
答案 0 :(得分:1)
你在这里遇到的问题是vuejs如何处理PackViewModel
。
如果您这样使用它:
data
图表将更新。但是通过重新初始化数组,你可以对抗vuejs。
TL; DR
如果要重新初始化对象,可以将数组分配给对象:
local_data.forEach(element => {
this.portfolio_value.push(element.total_usd);
this.portfolio_labels.push(moment(element.timestamp, 'X'));
});
this.chart.update();
这样,链接仍然有效。