vue-cli 引入 chart

本文展示了如何使用 Vue 和 ECharts 创建一个动态更新的柱状图。父组件初始化图表数据,并通过定时器每6秒随机更新数据。子组件负责初始化 ECharts 实例,实现图表的大小调整,并在接收到新数据时更新图表。
摘要由CSDN通过智能技术生成

在这里插入图片描述
父组件

<template>
    <div>
        <Chart :option="chartOption" style="height: 400px" />
    </div>
</template>
<script>
import Chart from "../../components/Chart";
import random from "lodash/random";

export default {
    components: {
        Chart,
    },
    data() {
        return {
            chartOption: {
                title: {
                    text: "ECharts",
                },
                tooltip: {},
                legend: {
                    data: ["销量"],
                },
                xAxis: {
                    data: [
                        "衬衫",
                        "羊毛衫",
                        "雪纺衫",
                        "裤子",
                        "高跟鞋",
                        "袜子",
                    ],
                },
                yAxis: {},
                series: [
                    {
                        name: "销量",
                        type: "bar",
                        data: [5, 20, 36, 10, 10, 20],
                    },
                ],
            },
        };
    },
    mounted() {
        this.interVal = setInterval(() => {
            this.chartOption.series[0].data = this.chartOption.series[0].data.map(
                () => random(100)
            );
            this.chartOption = { ...this.chartOption }; // 监听option 手动让 chartOption 变成新值
        }, 6000);
    },
    beforeDestroy() {
        clearInterval(this.interVal);
    },
};
</script>

子组件

<template>
    <div ref="chartdDom"></div>
</template>

<script>
import echarts from "echarts";
import { addListener, removeListener } from "resize-detector"; // echarts 高度宽度 适应
import debounce from "lodash/debounce";
export default {
    props: {
        option: {
            type: Object,
            default: () => {},
        },
    },
    watch: {
        option(val) {
            this.chart.setOption(val);
        },
    },
    created() {
        // 防抖
        this.resize = debounce(this.resize, 300);
    },
    mounted() {
        // 基于准备好的dom,初始化echarts实例
        this.chart = echarts.init(this.$refs.chartdDom);
        addListener(this.$refs.chartdDom, this.resize);

        // 使用刚指定的配置项和数据显示图表。
        this.renderChart();
    },
    beforeDestroy() {
        removeListener(this.$refs.chartdDom, this.resize);
        // 释放图表销毁对象并设为空
        this.chart.dispose();
        this.chart = null;
    },
    methods: {
        resize() {
            console.log("this");
            this.chart.resize();
        },
        renderChart() {
            this.chart.setOption(this.option);
        },
    },
};
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值