vue.js组件中的Chart.js图表​​不会更新

时间:2018-01-07 21:30:18

标签: javascript vue.js chart.js

我正在使用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!

1 个答案:

答案 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();

这样,链接仍然有效。