vue3基本使用Echarts

一。在Vue3项目中安装Echarts

npm install echarts --save

二。创建可视化组件

通常会把数据可视化功能单独放在一个组件。(单独获取数据,单独展示数据,从父组件获取字段)

barcharts组件(记得在组件销毁时销毁Echarts实例,以释放资源)

<template>
  <div class="echarts_box">
    <div id="myEcharts" :style="{ width: width, height: height }"></div>
  </div>
</template>

<script>
//引入echarts
import * as echarts from "echarts";
import { onMounted, onUnmounted } from "vue";
export default {
  name: "barCharts",
  props: ["width", "height"],
  setup() {
    let myEcharts = echarts;
    onMounted(() => {
      initCharts();
    });
    onUnmounted(() => {
       if (myEcharts) {
        myEcharts.dispose();
      }
    });
    function initCharts() {
      // 基于准备好的dom,初始化echarts实例
      // 获取DOM元素
      let myChart = myEcharts.init(document.getElementById("myEcharts"));
      // 绘制图表
      // 配置Echarts选项
      // 渲染图表
      myChart.setOption({
        title: {
          text: "ECharts 入门示例",
        },
        tooltip: {},
        xAxis: {
          data: ["衬衫", "毛毯", "帽子", "裤子", "高跟鞋", "袜子"],
        },
        yAxis: {},
        series: [
          {
            name: "销量",
            type: "bar",
            data: [5, 20, 36, 10, 10, 20],
          },
        ],
      });
      //在窗口大小改变时重新调整图表的大小。myChart.resize() 方法来重新计算和绘制图表,以适应新的窗口大小。
      //达到自适应效果
      window.onresize = function () {
        myChart.resize();
      };
    }

    return {
      initCharts,
    };
  },
};
</script>

<style lang="less" scoped>
</style>

index组件

<template>
  <div>
    <bar-charts-vue :width="'600px'" :height="'600px'" />
  </div>
</template>

<script>
import barChartsVue from "./barCharts.vue";
export default {
  components: {
    barChartsVue,
  },
  setup(props) {},
};
</script>

<style lang="less" scoped>
</style>

注意:
  1. 当结合element的el-tab-pane标签使用多个组件存在一个错误信息:echarts.js?v=a083a7e2:7946 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'getAttribute') at barcharts.vue:21:27
  2. 某些情况下遇到 undefined 错误或图表无法正常渲染的问题。这个问题通常发生在 Vue 的生命周期中,尤其是当图表 DOM 元素还未完全渲染时就尝试初始化 ECharts 实例。为了确保 ECharts 正常工作并解决潜在问题,我们可以进行一些改进。

【id="myEcharts"】ID注意设置唯一,多组件不使用同一个ID,避免渲染问题!!!

<template>
    <div class="echarts_box">
        <div id="myEcharts" :style="{ width: width, height: height }"></div>
    </div>
</template>

<script>
// 引入echarts
import * as echarts from "echarts";
import { onMounted, onUnmounted, nextTick, watch } from "vue";

export default {
    name: "barCharts",
    props: {
        width: {
            type: String,
            default: "600px",
        },
        height: {
            type: String,
            default: "400px",
        },
    },
    setup(props) {
        let myChart = null;

        // 初始化图表
        const initCharts = () => {
            const chartDom = document.getElementById("myEcharts");
            if (chartDom) {
                myChart = echarts.init(chartDom);
                myChart.setOption({
                    title: {
                        text: "ECharts 入门示例",
                    },
                    tooltip: {},
                    xAxis: {
                        data: ["衬衫", "毛毯", "帽子", "裤子", "高跟鞋", "袜子"],
                    },
                    yAxis: {},
                    series: [
                        {
                            name: "销量",
                            type: "bar",
                            data: [5, 20, 36, 10, 10, 20],
                        },
                    ],
                });
            }
        };

        // 窗口大小变化时重新调整图表
        const handleResize = () => {
            if (myChart) {
                myChart.resize();
            }
        };

        onMounted(() => {
            nextTick(() => {
                initCharts(); // 在 DOM 渲染完成后初始化图表
            });

            // 监听窗口大小变化
            window.addEventListener("resize", handleResize);
        });

        onUnmounted(() => {
            if (myChart) {
                myChart.dispose(); // 销毁 ECharts 实例
            }
            window.removeEventListener("resize", handleResize); // 移除事件监听器
        });

        // 监听 props 变化时,重新初始化图表
        watch(
            () => [props.width, props.height],
            () => {
                if (myChart) {
                    myChart.resize(); // 在 props 改变时,重新调整图表大小
                }
            }
        );

        return {
            initCharts,
        };
    },
};
</script>

<style lang="less" scoped>
.echarts_box {
    width: 100%;
    height: 100%;
}
</style>

Vue3使用 ECharts 创建饼图3D,你需要先安装 EChartsVue 组件库,例如 `vue-echarts` 或者 `@vue-echarts/core` 和 `@vue-echarts/components`。以下是基本步骤: 1. **安装依赖**: ```bash npm install vue-echarts @vue-echarts/core @vue-echarts/components ``` 2. **引入组件**: 在你的 Vue 文件中,导入 `ECharts` 组件: ```javascript import { ECharts } from &#39;@vue-echarts/core&#39;; import Pie3D from &#39;@vue-echarts/components/Pie3D.vue&#39;; ``` 3. **在模板中使用**: 使用 `<ECharts>` 标签包裹你的饼图3D配置,并提供数据和选项: ```html <template> <div id="chart"> <ECharts :options="chartOptions" ref="pieChart"></ECharts> </div> </template> <script> export default { components: { Pie3D, }, data() { return { chartOptions: { tooltip: {}, legend: {}, visualMap: {}, // 如果有颜色映射,可以添加这个部分 series: [ { type: &#39;pie&#39;, name: &#39;销售额分布&#39;, radius: [&#39;45%&#39;, &#39;70%&#39;], avoidLabelOverlap: false, label: { normal: { show: false, }, emphasis: { show: true, textStyle: { fontSize: &#39;30&#39;, }, }, }, itemStyle: { emphasis: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: &#39;rgba(0, 0, 0, 0.5)&#39;, }, }, data: [ { value: 335, name: &#39;产品A&#39; }, { value: 310, name: &#39;产品B&#39; }, { value: 234, name: &#39;产品C&#39; }, { value: 135, name: &#39;其他&#39; } ] } ], }; }, mounted() { this.$refs.pieChart.setOption(this.chartOptions); }, }; </script> ``` 4. **设置事件监听**(如果需要): 可以通过 `$refs` 监听图表的各种事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值