繁体   English   中英

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

[英]Chart.js chart in vue.js component does not update

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

为什么没有数据呈现任何想法? 谢谢!

您在这里遇到的问题是vuejs如何处理其data

如果您这样使用它:

local_data.forEach(element => {
    this.portfolio_value.push(element.total_usd);
    this.portfolio_labels.push(moment(element.timestamp, 'X'));
});

this.chart.update();

图表将更新。 但是,通过重新初始化数组,您可以对付vuejs。

TL; DR

如果要重新初始化对象,可以将数组分配给该对象:

Object.assign(this.portfolio_value, values);
Object.assign(this.portfolio_labels, labels);

这样,链接就可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM