Vue+Echarts封装成组件使用及说明

 更新时间:2025年12月03日 10:31:01   作者:沉默是金~  
文章总结了将Vue和Echarts封装成组件的经验,强调了组件的自适应功能,作者希望这个经验对大家有所帮助,并鼓励大家支持脚本之家

Vue+Echarts封装成组件

echarts组件 

<template>
  <div :id="chartId" :style="style"></div>
</template>

<script>
import * as echarts from "echarts";
//防抖
const debounce = function (fn, delay) {
  let timer = null;
  return function () {
    let content = this;
    let args = arguments;
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      fn.apply(content, args);
    }, delay);
  };
};
export default {
  name: "yw-echarts",
  props: {
    height: {
      type: String,
      default: "500px",
    },
    width: {
      type: String,
      default: "500px",
    },
    options: {
      type: Object,
      default: null,
    },
    chartId: {
      type: [String, Number],
      default: null,
    },
    minHeight: {
      type: String,
      default: "none",
    },
  },
  data() {
    return {
      myCharts: null, //echarts实例
    };
  },
  computed: {
    style() {
      return {
        height: this.height,
        width: this.width,
        minHeight: this.minHeight,
      };
    },
  },
  watch: {
    options: {
      handler(newVal, oldVal) {
        if (this.options) {
          // this.myCharts.clear();
          this.myCharts.setOption(newVal, true);
        } else {
          this.initChart();
        }
      },
      deep: true,
    },
  },
  created() {
    // 防抖优化
    this.handleResize = debounce(() => {
      this.myCharts.resize();
    }, 300);
  },
  mounted() {
    this.initChart();
  },
  beforeDestroy() {
    if (!this.myCharts) return;
    // 移除监听
    window.removeEventListener("resize", this.handleResize);
    // 销毁echarts实例
    this.myCharts.clear();
    this.myCharts.dispose();
    this.myCharts = null;
  },
  methods: {
    initChart() {
      this.$nextTick(() => {
        if (!this.myCharts) {
          this.myCharts = echarts.init(document.getElementById(this.chartId));
        }
        if (this.options) {
          this.myCharts.setOption(this.options, true);
        }
        if (this.myCharts) window.addEventListener("resize", this.handleResize);
      });
    },
  },
};
</script>

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

使用

      <Echarts
        :height="echartsNxObj.height"
        :width="echartsNxObj.width"
        :options="echartsNxObj.options"
        :chartId="echartsNxObj.chartId"
        
      />

总结

支持自适应~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue3纯前端实现验证码代码示例

    vue3纯前端实现验证码代码示例

    这篇文章主要介绍了验证码的用途和分类,展示了如何创建一个简单的纯前端字符验证码组件,并通过Canvas增加干扰线和干扰点的效果,通过Vue组件化开发,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • vue element插件this.$confirm用法及说明(取消也可以发请求)

    vue element插件this.$confirm用法及说明(取消也可以发请求)

    这篇文章主要介绍了vue element插件this.$confirm用法及说明(取消也可以发请求),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue3中axios请求封装、请求拦截与相应拦截详解

    Vue3中axios请求封装、请求拦截与相应拦截详解

    目前前端最流行的网络请求库还是axios,所以对axios的封装很有必要,下面这篇文章主要给大家介绍了关于Vue3中axios请求封装、请求拦截与相应拦截的相关资料,需要的朋友可以参考下
    2023-05-05
  • Vue双向绑定原理及实现方法

    Vue双向绑定原理及实现方法

    Vue双向绑定是指数据模型和视图之间的数据同步,通过Object.defineProperty()方法实现数据劫持,利用观察者模式实现数据更新和视图更新的自动同步,实现方式包括指令、计算属性、v-model等,优化方法包括使用虚拟DOM、合理使用computed和watch等
    2023-04-04
  • vue:axios请求本地json路径错误问题及解决

    vue:axios请求本地json路径错误问题及解决

    这篇文章主要介绍了vue:axios请求本地json路径错误问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • vuex的数据渲染与修改浅析

    vuex的数据渲染与修改浅析

    这篇文章主要给大家介绍了关于vuex的数据渲染与修改的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • vue3锚点定位两种实现方式示例

    vue3锚点定位两种实现方式示例

    这篇文章主要给大家介绍了关于vue3锚点定位两种实现的相关资料,说到锚点定位,很多人第一时间会想到 a标签,但是a标签实现的锚点定位并不是那么的完美,需要的朋友可以参考下
    2023-07-07
  • vue3中v-model的原理示例详解

    vue3中v-model的原理示例详解

    原生 JavaScript 实现,模拟 Vue 3 的 v-model 功能,包括表单元素和组件支持,我们将逐步构建代码,并提供使用示例,对vue v-model原理解析感兴趣的朋友一起看看吧
    2025-04-04
  • vue使用Font Awesome的方法步骤

    vue使用Font Awesome的方法步骤

    这篇文章主要介绍了vue使用Font Awesome的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Vue  webpack 项目自动打包压缩成zip文件的方法

    Vue webpack 项目自动打包压缩成zip文件的方法

    这篇文章主要介绍了Vue -- webpack 项目自动打包压缩成zip文件的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07

最新评论