如何在Vuejs上进行图表更新

时间:2018-12-31 19:07:45

标签: vue.js chartist.js

首先祝大家新年快乐。

我想通过update致电chartist-js

main.js

import Chartist from "chartist";

Vue.prototype.$Chartist = Chartist;

Component.vue

<chart-card
                    :chart-data="performanceUser.data"
                    :chart-options="performanceUser.options"
                    chart-type="Line"
                    data-background-color="green">
            </chart-card>

Component.vue -> methods

getStatsUser(){
      UsersAPI.getUserPerformance(this.users.filters.user.active).then(r => {
        this.performanceUser.data.labels = r.data.labels;
        this.performanceUser.data.series = r.data.series;

        this.$Chartist.update();

      });
    }

1 个答案:

答案 0 :(得分:1)

您需要做几件事。首先,您不需要使用 Chartist 实例修补Vue原型对象。只需在需要的地方导入Chartist软件包。当您需要单例或有状态构造时,需要进行原型修补。

第二,假设您所有的图表呈现逻辑都将在chart-card组件内。大致如下:

<template>
    <!-- Use vue.js ref to get DOM Node reference -->
    <div class="chart-container" ref="chartNode"></div>
</template>
<script>
import Chartist from 'chartist';

export default {

    // data is an object containing Chart X and Y axes data
    // Options is your Chartist chart customization options
    props: ['data', 'options'],

    // Use of mounted is important.
    // Otherwise $refs will not work
    mounted() {

        if (this.data && this.options) {
            // Reference to DOM Node where you will render chart using Chartist
            const divNode = this.$refs.chartNode;

            // Example of drawing Line chart
            this.chartInstance = new Chartist.Line(divNode, this.data, this.options);
        }

    },

    // IMPORTANT: Vue.js is Reactive framework.
    // Hence watch for prop changes here
    watch: {
        data(newData, oldDate) {
            this.chartInstance.update(newData, this.options);
        },

        options(newOpts) {
            this.chartInstance.update(this.data, newOpts);
        }
    }
}
</script>

最后,在您的调用组件中,您将具有:

getStatsUser() {
    UsersAPI.getUserPerformance(this.users.filters.user.active).then(r => {
        // Since component is watching props,
        // changes to `this.performanceUser.data`
        // should automatically update component
        this.performanceUser.data = {
            labels: r.data.labels,
            series: r.data.series
        };
    });
}

我希望这可以使您了解如何为Chartist图构建Vue包装器。