<template> <div :class="className" :style="{ height: height, width: width }" /> </template> <script> import * as echarts from 'echarts';; require("echarts/theme/macarons"); // echarts theme import resize from "./mixins/resize"; const animationDuration = 2600; export default { mixins: [resize], props: { className: { type: String, default: "chart", }, width: { type: String, default: "100%", }, height: { type: String, default: "350px", }, autoResize: { type: Boolean, default: true, }, chartData: { required: true, }, }, data() { return { chart: null, }; }, watch: { chartData: { deep: true, handler(val) { this.setOptions(val); }, }, }, mounted() { this.$nextTick(() => { this.initChart(); }); }, beforeDestroy() { if (!this.chart) { return; } this.chart.dispose(); this.chart = null; }, methods: { initChart() { this.chart = echarts.init(this.$el); this.setOptions(this.chartData); }, setOptions(chartData) { this.chart.setOption(chartData); }, }, }; </script>