首先祝大家新年快乐。
我想通过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();
});
}
答案 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包装器。