# vue-echarts
**Repository Path**: wangankeji-fe/vue-echarts
## Basic Information
- **Project Name**: vue-echarts
- **Description**: 对 echarts 的功能封装,提供常见特性
- **Primary Language**: JavaScript
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 0
- **Created**: 2020-08-10
- **Last Updated**: 2025-02-26
## Categories & Tags
**Categories**: vue-extensions
**Tags**: None
## README
# ECharts
对 [ECHARTS](https://echarts.apache.org/) 的简单封装。
此组件最大限度保留 echarts 原生用法,以降低学习成本。
## 安装
```shell script
npm i @hyjiacan/vue-echarts
```
## 用法
```vue
```
> 当未明确指定高度(使用 `class` 或 `style` 指定 `width`/`height`)时,组件会自动撑满父容器。
ECharts 会监控(周期为 `500ms`,可以通过调用 [setResizeInterval](#setresizeinterval) 改变周期)组件元素的尺寸变化, 在变化后,若组件指定了 `auto-resize`
属性,那么就自动执行 `resize` 操作。
> 组件中采用了单一事件循环,不会造成大量的CPU资源占用。
## 属性
|名称|类型|必填|默认值|描述|
|---|---|---|---|---|
|options|Object|是|-|传给图片实例的配置对象|
|group|String|否|-|用于 `echarts.connect/disconnect` 的 `group` ID。参考 **echarts.connect**|
|theme|String|否|-|应用的主题。参考 **echarts.registerTheme**|
|opts|Object|否|-|附加参数。参考 **echarts.init**|
|listen|Object|否|-|需要在图表上监听的事件集合|
|auto-resize|Boolean|true|是否在容器大小变化后自动执行 resize 操作|
|empty-text|String|暂无数据|当选项为空或数据为空时的占位文本|
|show-empty-mask|Boolean|false|是否在没有数据时显示 mask 以及 `empty-text`|
|carousel|Object|-|走马灯效果(自动播放)参数,详见 [carousel](#carousel)|
|option-opts|Object|否|-|在调用 `setOption(option, opts)` 时的第二个参数|
|not-merge|Boolean|否|false|在调用 `setOption(option, notMerge, lazyUpdate)` 时的第二个参数。当指定了 `option-opts` 时无效|
|lazy-update|Boolean|否|false|在调用 `setOption(option, notMerge, lazyUpdate)` 时的第三个参数。当指定了 `option-opts` 时无效|
|delay|Number|否|0|用于延时渲染图表。一般用于存放图表的窗口具有动画时,以在动画执行完成后再进行渲染。单位为 毫秒|
在 `options` 中,添加了一些额外的属性:
- `key` 用于区分不同的数据项。一般用于对同一个图表应用不同 `options` 时,在渲染前清除原有的渲染结果。 并没有把 `key` 设置成 `prop`,是为了方便在 `option` 中直接指定,以便于同个图表展示不同的数据。
另外,可以通过 `ECharts.defaults` 设置默认值(会自动与 `setOption(option)` 中的 `option` 进行 **浅表** 合并)。
```javascript
import ECharts from '@hyjiacan/vue-echarts'
ECharts.defaults.color = ['red', 'green', 'blue']
```
`listen` 监听事件的写法:
```javascript
const handlers = {
legendselected: function (e) {
},
click: {
// 也可以是对象
query: 'series',
handler: function (e) {
},
// 指定上下文: this 指向
context: {}
},
}
```
### 第三方组件
目前能够自动识别并 **按需加载** 以下组件:
- [echarts-gl](https://github.com/ecomfe/echarts-gl)
- [echarts-liquidfill](https://github.com/ecomfe/echarts-liquidfill)
- [echarts-wordcloud](https://github.com/ecomfe/echarts-wordcloud)
> 需要在项目中添加对应包的依赖。
### carousel
`carousel` 是基于 [action](https://echarts.apache.org/zh/api.html#action) 的图表定时操作支持,其结构如下:
```javascript
carousel = {
// 是否在鼠标放上时暂时,移开后恢复
mouse: true,
// 操作时间间隔,单位为毫秒
interval: 5000,
// 自动播放的动作,其值可以是对象(单个动作)或数组(多个动作)
// 值与调用 dispatchAction 的值一致
// 在未指定 seriesIndex 时,会自动设置为 0
// 可以附加一个 undo 属性,用于指定此操作在下次执行时会先被取消(执行对应的取消操作)
actions: [{
type: 'highlight'
}]
}
```
- 当 `carousel` 值为数组时,其表示要执行的 `actions`,同时使用默认的 `{interval: 5000, mouse: true}`
- 当 `carousel` 值为字符串时,表示其要执行的某个 `action`,同时使用默认的 `{interval: 5000, mouse: true}`
目前支持的 action:
- highlight
- legendSelect _Working in progress_
- showTip
- pieSelect
- geoSelect
- mapSelect
## 内置事件
|名称|参数|描述|
|---|---|---|
|ready|{id: String, chart: echarts}|组件首次渲染完成后触发。`id` 为 `ECharts` 组件实例的 id,并非 `echarts` 图表实例的 id|
> 仅当 `options` 不为空,并且其内的数据有效时才会渲染图表,在其后才会触发 `ready` 事件。
> `ready` 事件仅在首次渲染后会触发一次。
## 函数
### get
`ECharts.get(id)` 获取组件的 echarts 实例,`id` 为 `ready` 事件的参数, 也可以通过 `$el.getAttribute('data-echarts-id')` 获取到。
### resize
`ECharts.resize(id)` 调整指定组件的尺寸,`id` 为 `ready` 事件的参数, 也可以通过 `$el.getAttribute('data-echarts-id')` 获取到。
### resizeAll
`ECharts.resizeAll()` 调整所有组件的尺寸。
### setResizeInterval
`ECharts.setResizeInterval(timeout)` 设置自动调整尺寸的周期,单位为毫秒。默认为 `500ms`
### setInterceptor
`ECharts.setInterceptor(options)` 设置 `options` 拦截器,用于在将其提交给 echarts 前做全局处理。返回修改后的或者新的 `options` 对象。
## 插槽
|名称|参数|描述|
|---|---|---|
|prepend|-|图表前的内容,处于图表 `z-index` 的下一层|
|append|-|图表后的内容,处于图表 `z-index` 的上一层|
|empty|-|图表选项或数据为空时要显示的内容,指定此插槽时,`empty-text` 无效|
> 为了防止鼠标事件被拦截,`append` 插槽以及其子元素会忽略鼠标事件。
## 参考
- 主题和附加参数 [echarts.init](https://echarts.apache.org/zh/api.html#echarts.init)
- 绑定事件 [instance.on](https://echarts.apache.org/zh/api.html#echartsInstance.on)
- 事件类型 [events](https://echarts.apache.org/zh/api.html#events)
- [事件和行为](https://echarts.apache.org/zh/tutorial.html#ECharts%20%E4%B8%AD%E7%9A%84%E4%BA%8B%E4%BB%B6%E5%92%8C%E8%A1%8C%E4%B8%BA)
- 图表联动 [echarts.connect](https://echarts.apache.org/zh/api.html#echarts.connect)
- 主题 [echarts.registerTheme](https://echarts.apache.org/zh/api.html#echarts.registerTheme)
- [自动切换地图区域高亮](https://segmentfault.com/q/1010000018858499)
## 待办
- 仅在有图表实例时才执行定时器,如果图表被销毁,那么就停止定时器