目录
场景
需求
代码总览
实现
components--chart--index.vue
components--chart--index.js
components--chart--options
main.js
chartTest
index.vue
index.js
代码
总结
补充
补充2:图表高亮轮询,dispatchAction使用
使用方法
首页 web前端 Vue.js vue项目怎么优雅的封装echarts?方法介绍

vue项目怎么优雅的封装echarts?方法介绍

Mar 10, 2022 pm 07:48 PM
vue项目

vue项目怎么优雅的封装echarts?下面本篇文章给大家介绍一下vue项目中封装echarts的比较优雅的方式,希望对大家有所帮助!

vue项目怎么优雅的封装echarts?方法介绍

场景

  • 1、Echarts使用时,都需要写一堆的option,如果每个图表都要写一个,一个文件里面的代码量是很大的
  • 2、不方便复用

需求

  • 1、方便复用
  • 2、展示类的图表,数据与业务、样式分离,只传数据就行
  • 3、项目里需要用到的图表会有多个,实现少代码自动化导入,不需要一个个import
  • 4、本人图表用在大屏数据可视化的情况比较多,采用的是等比缩放的方式,所以图表也能根据界面缩放自动缩放,不需要手动调用。【相关推荐:vuejs视频教程
  • 5、图表可配置

代码总览

涉及的文件如下(具体参考代码):

|-- src
    |-- components
        |-- chart
            |-- index.vue    // 图表单文件组件,供界面调用
            |-- index.js    // 实现自动化导入options里的图表option
            |-- options    // 存放各种图表的option
                |-- bar    // 随便一例子
                    |-- index.js
    |-- views
        |-- chartTest    // 实例所在
            |-- index.vue
            |-- index.scss
            |-- index.js
|-- main.js    // 全局引入echarts图表
登录后复制

实现

components--chart--index.vue

这里定义了一个名为ChartView 的组件,开放了4个可配置的属性:宽度width,高度height, 是否自动调整大小autoResize(默认是), 图表的配置chartOption

这里默认用Canvas 渲染图表了,也可以用SVG的,自选吧

具体代码如下

<template>
  <div class="chart">
    <div ref="chart" :style="{ height: height, width: width }" />
  </div>
</template>
<script>

// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
import * as echarts from &#39;echarts/core&#39;
// 引入柱状图图表,图表后缀都为 Chart
import {
  BarChart
} from &#39;echarts/charts&#39;
// 引入提示框,标题,直角坐标系组件,组件后缀都为 Component
import {
  TitleComponent,
  TooltipComponent,
  GridComponent
} from &#39;echarts/components&#39;
// 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
import {
  CanvasRenderer
} from &#39;echarts/renderers&#39;

// 注册必须的组件
echarts.use(
  [TitleComponent, TooltipComponent, GridComponent, BarChart, CanvasRenderer]
)

export default {
  name: &#39;ChartView&#39;,
  props: {
    width: {
      type: String,
      default: &#39;100%&#39;
    },
    height: {
      type: String,
      default: &#39;350px&#39;
    },
    autoResize: {
      type: Boolean,
      default: true
    },
    chartOption: {
      type: Object,
      required: true
    },
    type: {
      type: String,
      default: &#39;canvas&#39;
    }
  },
  data() {
    return {
      chart: null
    }
  },
  watch: {
    chartOption: {
      deep: true,
      handler(newVal) {
        this.setOptions(newVal)
      }
    }
  },
  mounted() {
    this.initChart()
    if (this.autoResize) {
      window.addEventListener(&#39;resize&#39;, this.resizeHandler)
    }
  },
  beforeDestroy() {
    if (!this.chart) {
      return
    }
    if (this.autoResize) {
      window.removeEventListener(&#39;resize&#39;, this.resizeHandler)
    }
    this.chart.dispose()
    this.chart = null
  },
  methods: {
    resizeHandler() {
      this.chart.resize()
    },
    initChart() {
      this.chart = echarts.init(this.$refs.chart, &#39;&#39;, {
        renderer: this.type
      })
      this.chart.setOption(this.chartOption)
      this.chart.on(&#39;click&#39;, this.handleClick)
    },
    handleClick(params) {
      this.$emit(&#39;click&#39;, params)
    },
    setOptions(option) {
      this.clearChart()
      this.resizeHandler()
      if (this.chart) {
        this.chart.setOption(option)
      }
    },
    refresh() {
      this.setOptions(this.chartOption)
    },
    clearChart() {
      this.chart && this.chart.clear()
    }
  }
}
</script>
登录后复制

components--chart--index.js

这里主要利用require.context,把options里面定义的图表遍历导入,这样就不需要在代码里一个个import了,特别是图表多的时候。

const modulesFiles = require.context(&#39;./options&#39;, true, /index.js$/)
let modules = {}
modulesFiles.keys().forEach(item => {
  modules = Object.assign({}, modules, modulesFiles(item).default)
})
export default modules
登录后复制

components--chart--options

这里展示下如何封装自己想要的图表

Echarts官方示例(https://echarts.apache.org/examples/zh/index.html)上随便选了个示例

1.png

options下新建一个bar目录,bar目录下新建一个index.js文件。(个人习惯而已,喜欢每个图表都独立文件夹存放。不喜欢这种方式的,可以不放目录,直接js文件,但是components--chart--index.js要对应修改下)

直接复制示例的option代码

index.js具体代码如下

const testBar = (data) => {
  const defaultConfig = {
    xAxis: {
      type: &#39;category&#39;,
      data: [&#39;Mon&#39;, &#39;Tue&#39;, &#39;Wed&#39;, &#39;Thu&#39;, &#39;Fri&#39;, &#39;Sat&#39;, &#39;Sun&#39;]
    },
    yAxis: {
      type: &#39;value&#39;
    },
    series: [{
      data: [120, 200, 150, 80, 70, 110, 130],
      type: &#39;bar&#39;
    }]
  }

  const opt = Object.assign({}, defaultConfig)
  return opt
}

export default {
  testBar
}
登录后复制

testBar方法是可以传参的,具体使用的时候,图表所需要配置的属性,如:data数据、图表颜色......等都可以作为参数传。

main.js

这里全局引入下封装的Echarts组件,方便界面调用。(至于单个引用的方式,就不必多说了)

具体代码如下:

import eChartFn from &#39;@/components/chart/index.js&#39;
import ChartPanel from &#39;@/components/chart/index.vue&#39;
Vue.component(ChartPanel.name, ChartPanel)
Vue.prototype.$eChartFn = eChartFn
登录后复制

chartTest

这里展示下如何调用封装的bar图表,主要代码如下

index.vue

<chart-view class="chart-content" :chart-option="chartOpt" :auto-resize="true" height="100%" />
登录后复制

index.js

export default {
  name: &#39;chartTestView&#39;,
  data() {
    return {
      chartOpt: {}
    }
  },
  mounted() {},
  created() {
    this.chartOpt = this.$eChartFn.testBar()
  },
  methods: {
  },
  watch: {}
}
登录后复制

效果如下

2.png

可以尝试拖动浏览器的大小,可以看到,图表也是随着浏览器的拖动自动缩放的。

代码

代码总览的目录去代码里找着看就行了。

  • https://github.com/liyoro/vue-skill

总结

Echarts用到的各种图表,基本上都可以在Echarts官方示例Echarts可视化作品分享上找到,特别是Echarts可视化作品分享,做项目的时候,可以去参考。

以上,封装了chart组件,按照上述方式,把图表的option配置和相关处理都放options文件夹下面,调用图表时传对应的option,也就几行代码的事情,算是比较方便了。

chart组件很方便复用的,直接就可以使用了。

补充

评论里说想动态修改option里面的属性,稍微做了个例子,动态修改pie图表的datacolor属性,这个是直接生产就可以使用的例子了,直接参考代码就行了,不详细说了。想修改什么属性,直接传参就行。传具体参数可以,想修改的属性多了就把参数封装成一个json传也可以。懂得在封装的option里面灵活使用就行。

以下是新增的参考代码

|-- src
    |-- components
        |-- chart
            |-- options    // 存放各种图表的option
                |-- pie    // pie例子
                    |-- index.js
    |-- views
        |-- chartTest    // 实例所在
            |-- index.vue
            |-- index.scss
            |-- index.js
登录后复制

代码使用都是直接一行调用的

this.chartOpt2 = this.$eChartFn.getPieChart([100, 23, 43, 65], [&#39;#36CBCB&#39;, &#39;#FAD337&#39;, &#39;#F2637B&#39;, &#39;#975FE4&#39;])
登录后复制

效果如下:

3.png

补充2:图表高亮轮询,dispatchAction使用

效果图

4.gif

使用方法

加上:play-highlight="true"属性就行

<chart-view class="chart-content" :chart-option="chartOpt2" :auto-resize="true" :play-highlight="true" height="100%" />
登录后复制

主要实现的代码在如下文件的playHighlightAction方法里面,参考的echarts 饼图调用高亮示例 dispatchAction实现的。只是简单的高亮轮询,具体各种实现就自己看文档调样式了。

|-- src
    |-- components
        |-- chart
            |-- index.js    // 实现自动化导入options里的图表option
登录后复制

(学习视频分享:vuejs教程web前端

以上是vue项目怎么优雅的封装echarts?方法介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1671
14
CakePHP 教程
1428
52
Laravel 教程
1330
25
PHP教程
1276
29
C# 教程
1256
24
如何在Vue项目中使用移动端的手势操作 如何在Vue项目中使用移动端的手势操作 Oct 08, 2023 pm 07:33 PM

如何在Vue项目中使用移动端的手势操作随着移动设备的普及,越来越多的应用程序需要在移动端上提供更加友好的交互体验。而手势操作是移动设备上常见的交互方式之一,它能够让用户通过触摸屏幕来完成各种操作,如滑动、缩放等。在Vue项目中,我们可以通过第三方库来实现移动手势操作,下面将介绍如何在Vue项目中使用手势操作,并提供具体的代码示例。首先,我们需要引入一个专门用

webstorm怎么运行vue项目 webstorm怎么运行vue项目 Apr 08, 2024 pm 01:57 PM

要使用 WebStorm 运行 Vue 项目,可以按照以下步骤进行操作:安装 Vue CLI创建 Vue 项目打开 WebStorm启动开发服务器运行项目查看浏览器中的项目在 WebStorm 中调试项目

webstorm怎么创建vue项目 webstorm怎么创建vue项目 Apr 08, 2024 pm 12:03 PM

通过以下步骤在 WebStorm 中创建 Vue 项目:安装 WebStorm 和 Vue CLI。在 WebStorm 中创建一个 Vue 项目模板。使用 Vue CLI 命令创建项目。将现有项目导入 WebStorm。使用 "npm run serve" 命令运行 Vue 项目。

Vue项目中出现的TypeError: Cannot read property 'length' of undefined,该如何处理? Vue项目中出现的TypeError: Cannot read property 'length' of undefined,该如何处理? Nov 25, 2023 pm 12:58 PM

在Vue项目开发中,我们常常会遇到TypeError:Cannotreadproperty'length'ofundefined这样的错误提示。这个错误意味着在代码中试图读取一个未定义的变量的属性,尤其是在数组或对象的属性上。这个错误通常会导致应用程序中断和崩溃,因此我们需要及时处理它。在本文中,我们将会讨论该如何处理这个错误。检查代码中的变量定

Vue项目中如何实现表格数据的导出和导入 Vue项目中如何实现表格数据的导出和导入 Oct 08, 2023 am 09:42 AM

Vue项目中如何实现表格数据的导出和导入,需要具体代码示例引言在Vue项目中,表格是非常常见且重要的组件之一。在实际项目中,我们经常会遇到需要将表格数据导出为Excel或导入Excel中的数据显示在表格中的需求。本文将详细介绍在Vue项目中如何实现表格数据的导出和导入,并提供具体的代码示例。表格数据导出在Vue中实现表格数据导出,我们可以借助现有成熟的开源库

vscode怎么打包vue项目_vscode打包vue项目方法 vscode怎么打包vue项目_vscode打包vue项目方法 Apr 23, 2024 pm 03:43 PM

第一步:进入VisualStudioCode界面,选择文件→首选项→设置第二步:打开settings.json文件,输入:"npm.enableScriptExplorer":true,保存第三步:重启VisualStudioCode,重新进入界面,在左侧边菜单栏底部出现NPM脚本菜单栏里,右键点击build运行第四步:执行完毕,打包文件夹dist成功生成

Vue项目中如何进行数据的本地存储和管理 Vue项目中如何进行数据的本地存储和管理 Oct 08, 2023 pm 12:05 PM

Vue项目中数据的本地存储和管理是非常重要的,可以使用浏览器提供的本地存储API来实现数据的持久化存储。本文将介绍如何在Vue项目中使用localStorage来进行数据的本地存储和管理,并提供具体的代码示例。初始化数据在Vue项目中,首先需要初始化需要进行本地存储的数据。可以在Vue组件的data选项中定义初始数据,并通过created钩子函数来检查是否已

如何在前端实现不同品牌高拍仪的拍照上传功能? 如何在前端实现不同品牌高拍仪的拍照上传功能? Apr 04, 2025 pm 05:42 PM

在前端如何实现不同品牌高拍仪的拍照上传功能在开发前端项目时,常常会遇到需要集成硬件设备的需求。对于...

See all articles