mirror of
https://github.com/ecomfe/vue-echarts.git
synced 2025-11-06 04:46:53 +08:00
Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d774558f3e | |||
| 5d23006866 | |||
| 443eaa0367 | |||
| 16f3f4b419 | |||
| e651d32334 | |||
| a8e30b137a | |||
| 09808a47d2 | |||
| 898195c770 | |||
| 07e0d067d5 | |||
| 185940aecb | |||
| def674bc6c | |||
| feb4f03587 | |||
| 5cdff0b4f9 | |||
| 29ff9bc52a | |||
| 54d196c9d5 | |||
| 34defec669 | |||
| e189abd9c2 | |||
| f07855df08 | |||
| ae3102a86c | |||
| 48a2507ef8 | |||
| 311d588850 | |||
| 2f1910ec87 | |||
| 48a0664c2b | |||
| 05ec40a956 | |||
| dc9dccbf05 |
28
CHANGELOG.md
28
CHANGELOG.md
@ -1,3 +1,31 @@
|
|||||||
|
## 6.7.3
|
||||||
|
|
||||||
|
* Fixed that `padding` on the component root doesn't work.
|
||||||
|
|
||||||
|
## 6.7.2
|
||||||
|
|
||||||
|
* Fixed that charts inside `<keep-alive>` failed to display after activation.
|
||||||
|
|
||||||
|
## 6.7.1
|
||||||
|
|
||||||
|
* Fixed that native events won't actually trigger.
|
||||||
|
|
||||||
|
## 6.7.0
|
||||||
|
|
||||||
|
* Added supports for native DOM events binding with the `native:` prefix.
|
||||||
|
|
||||||
|
## 6.6.10
|
||||||
|
|
||||||
|
* Fixed that `autoresize` doesn't work when reducing the height or the root element.
|
||||||
|
|
||||||
|
## 6.6.9
|
||||||
|
|
||||||
|
* Fixed that the chart may not be the same size as the component root element ([#761](https://github.com/ecomfe/vue-echarts/issues/761)).
|
||||||
|
|
||||||
|
## 6.6.8
|
||||||
|
|
||||||
|
* Fixed the postinstall script to patch the correct `types` entry for Vue 2.7.
|
||||||
|
|
||||||
## 6.6.7
|
## 6.6.7
|
||||||
|
|
||||||
* Added missing type file for Vue 2.7.
|
* Added missing type file for Vue 2.7.
|
||||||
|
|||||||
146
README.md
146
README.md
@ -236,9 +236,9 @@ Drop `<script>` inside your HTML file and access the component via `window.VueEC
|
|||||||
|
|
||||||
<!-- vue3Scripts:start -->
|
<!-- vue3Scripts:start -->
|
||||||
```html
|
```html
|
||||||
<script src="https://cdn.jsdelivr.net/npm/vue@3.3.7"></script>
|
<script src="https://cdn.jsdelivr.net/npm/vue@3.4.23"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3"></script>
|
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.6.7"></script>
|
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.7.3"></script>
|
||||||
```
|
```
|
||||||
<!-- vue3Scripts:end -->
|
<!-- vue3Scripts:end -->
|
||||||
|
|
||||||
@ -256,9 +256,9 @@ app.component('v-chart', VueECharts)
|
|||||||
|
|
||||||
<!-- vue2Scripts:start -->
|
<!-- vue2Scripts:start -->
|
||||||
```html
|
```html
|
||||||
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.15"></script>
|
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.16"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3"></script>
|
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.6.7"></script>
|
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.7.3"></script>
|
||||||
```
|
```
|
||||||
<!-- vue2Scripts:end -->
|
<!-- vue2Scripts:end -->
|
||||||
|
|
||||||
@ -319,6 +319,78 @@ See more examples [here](https://github.com/ecomfe/vue-echarts/tree/main/src/dem
|
|||||||
|
|
||||||
For performance critical scenarios (having a large dataset) we'd better bypass Vue's reactivity system for `option` prop. By specifying `manual-update` prop with `true` and not providing `option` prop, the dataset won't be watched any more. After doing so, you need to retrieve the component instance with `ref` and manually call `setOption` method to update the chart.
|
For performance critical scenarios (having a large dataset) we'd better bypass Vue's reactivity system for `option` prop. By specifying `manual-update` prop with `true` and not providing `option` prop, the dataset won't be watched any more. After doing so, you need to retrieve the component instance with `ref` and manually call `setOption` method to update the chart.
|
||||||
|
|
||||||
|
### Events
|
||||||
|
|
||||||
|
You can bind events with Vue's `v-on` directive.
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<v-chart :option="option" @highlight="handleHighlight" />
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Note**
|
||||||
|
>
|
||||||
|
> Only the `.once` event modifier is supported as other modifiers are tightly coupled with the DOM event system.
|
||||||
|
|
||||||
|
Vue-ECharts support the following events:
|
||||||
|
|
||||||
|
- `highlight` [→](https://echarts.apache.org/en/api.html#events.highlight)
|
||||||
|
- `downplay` [→](https://echarts.apache.org/en/api.html#events.downplay)
|
||||||
|
- `selectchanged` [→](https://echarts.apache.org/en/api.html#events.selectchanged)
|
||||||
|
- `legendselectchanged` [→](https://echarts.apache.org/en/api.html#events.legendselectchanged)
|
||||||
|
- `legendselected` [→](https://echarts.apache.org/en/api.html#events.legendselected)
|
||||||
|
- `legendunselected` [→](https://echarts.apache.org/en/api.html#events.legendunselected)
|
||||||
|
- `legendselectall` [→](https://echarts.apache.org/en/api.html#events.legendselectall)
|
||||||
|
- `legendinverseselect` [→](https://echarts.apache.org/en/api.html#events.legendinverseselect)
|
||||||
|
- `legendscroll` [→](https://echarts.apache.org/en/api.html#events.legendscroll)
|
||||||
|
- `datazoom` [→](https://echarts.apache.org/en/api.html#events.datazoom)
|
||||||
|
- `datarangeselected` [→](https://echarts.apache.org/en/api.html#events.datarangeselected)
|
||||||
|
- `timelinechanged` [→](https://echarts.apache.org/en/api.html#events.timelinechanged)
|
||||||
|
- `timelineplaychanged` [→](https://echarts.apache.org/en/api.html#events.timelineplaychanged)
|
||||||
|
- `restore` [→](https://echarts.apache.org/en/api.html#events.restore)
|
||||||
|
- `dataviewchanged` [→](https://echarts.apache.org/en/api.html#events.dataviewchanged)
|
||||||
|
- `magictypechanged` [→](https://echarts.apache.org/en/api.html#events.magictypechanged)
|
||||||
|
- `geoselectchanged` [→](https://echarts.apache.org/en/api.html#events.geoselectchanged)
|
||||||
|
- `geoselected` [→](https://echarts.apache.org/en/api.html#events.geoselected)
|
||||||
|
- `geounselected` [→](https://echarts.apache.org/en/api.html#events.geounselected)
|
||||||
|
- `axisareaselected` [→](https://echarts.apache.org/en/api.html#events.axisareaselected)
|
||||||
|
- `brush` [→](https://echarts.apache.org/en/api.html#events.brush)
|
||||||
|
- `brushEnd` [→](https://echarts.apache.org/en/api.html#events.brushEnd)
|
||||||
|
- `brushselected` [→](https://echarts.apache.org/en/api.html#events.brushselected)
|
||||||
|
- `globalcursortaken` [→](https://echarts.apache.org/en/api.html#events.globalcursortaken)
|
||||||
|
- `rendered` [→](https://echarts.apache.org/en/api.html#events.rendered)
|
||||||
|
- `finished` [→](https://echarts.apache.org/en/api.html#events.finished)
|
||||||
|
- Mouse events
|
||||||
|
- `click` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.click)
|
||||||
|
- `dblclick` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.dblclick)
|
||||||
|
- `mouseover` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.mouseover)
|
||||||
|
- `mouseout` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.mouseout)
|
||||||
|
- `mousemove` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.mousemove)
|
||||||
|
- `mousedown` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.mousedown)
|
||||||
|
- `mouseup` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.mouseup)
|
||||||
|
- `globalout` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.globalout)
|
||||||
|
- `contextmenu` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.contextmenu)
|
||||||
|
- ZRender events
|
||||||
|
- `zr:click`
|
||||||
|
- `zr:mousedown`
|
||||||
|
- `zr:mouseup`
|
||||||
|
- `zr:mousewheel`
|
||||||
|
- `zr:dblclick`
|
||||||
|
- `zr:contextmenu`
|
||||||
|
|
||||||
|
See supported events [here →](https://echarts.apache.org/en/api.html#events)
|
||||||
|
|
||||||
|
#### Native DOM Events
|
||||||
|
|
||||||
|
As Vue-ECharts binds events to the ECharts instance by default, there is some caveat when using native DOM events. You need to prefix the event name with `native:` to bind native DOM events (or you can use the `.native` modifier in Vue 2, which is dropped in Vue 3).
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<v-chart @native:click="handleClick" />
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
### Provide / Inject
|
### Provide / Inject
|
||||||
|
|
||||||
Vue-ECharts provides provide/inject API for `theme`, `init-options`, `update-options` and `loading-options` to help configuring contextual options. eg. for `init-options` you can use the provide API like this:
|
Vue-ECharts provides provide/inject API for `theme`, `init-options`, `update-options` and `loading-options` to help configuring contextual options. eg. for `init-options` you can use the provide API like this:
|
||||||
@ -402,68 +474,6 @@ import { THEME_KEY } from 'vue-echarts'
|
|||||||
|
|
||||||
Static methods can be accessed from [`echarts` itself](https://echarts.apache.org/en/api.html#echarts).
|
Static methods can be accessed from [`echarts` itself](https://echarts.apache.org/en/api.html#echarts).
|
||||||
|
|
||||||
### Events
|
|
||||||
|
|
||||||
You can bind events with Vue's `v-on` directive.
|
|
||||||
|
|
||||||
```vue
|
|
||||||
<template>
|
|
||||||
<v-chart :option="option" @highlight="handleHighlight" />
|
|
||||||
</template>
|
|
||||||
```
|
|
||||||
|
|
||||||
> **Note**
|
|
||||||
>
|
|
||||||
> Only the `.once` event modifier is supported as other modifiers are tightly coupled with the DOM event system.
|
|
||||||
|
|
||||||
Vue-ECharts support the following events:
|
|
||||||
|
|
||||||
- `highlight` [→](https://echarts.apache.org/en/api.html#events.highlight)
|
|
||||||
- `downplay` [→](https://echarts.apache.org/en/api.html#events.downplay)
|
|
||||||
- `selectchanged` [→](https://echarts.apache.org/en/api.html#events.selectchanged)
|
|
||||||
- `legendselectchanged` [→](https://echarts.apache.org/en/api.html#events.legendselectchanged)
|
|
||||||
- `legendselected` [→](https://echarts.apache.org/en/api.html#events.legendselected)
|
|
||||||
- `legendunselected` [→](https://echarts.apache.org/en/api.html#events.legendunselected)
|
|
||||||
- `legendselectall` [→](https://echarts.apache.org/en/api.html#events.legendselectall)
|
|
||||||
- `legendinverseselect` [→](https://echarts.apache.org/en/api.html#events.legendinverseselect)
|
|
||||||
- `legendscroll` [→](https://echarts.apache.org/en/api.html#events.legendscroll)
|
|
||||||
- `datazoom` [→](https://echarts.apache.org/en/api.html#events.datazoom)
|
|
||||||
- `datarangeselected` [→](https://echarts.apache.org/en/api.html#events.datarangeselected)
|
|
||||||
- `timelinechanged` [→](https://echarts.apache.org/en/api.html#events.timelinechanged)
|
|
||||||
- `timelineplaychanged` [→](https://echarts.apache.org/en/api.html#events.timelineplaychanged)
|
|
||||||
- `restore` [→](https://echarts.apache.org/en/api.html#events.restore)
|
|
||||||
- `dataviewchanged` [→](https://echarts.apache.org/en/api.html#events.dataviewchanged)
|
|
||||||
- `magictypechanged` [→](https://echarts.apache.org/en/api.html#events.magictypechanged)
|
|
||||||
- `geoselectchanged` [→](https://echarts.apache.org/en/api.html#events.geoselectchanged)
|
|
||||||
- `geoselected` [→](https://echarts.apache.org/en/api.html#events.geoselected)
|
|
||||||
- `geounselected` [→](https://echarts.apache.org/en/api.html#events.geounselected)
|
|
||||||
- `axisareaselected` [→](https://echarts.apache.org/en/api.html#events.axisareaselected)
|
|
||||||
- `brush` [→](https://echarts.apache.org/en/api.html#events.brush)
|
|
||||||
- `brushEnd` [→](https://echarts.apache.org/en/api.html#events.brushEnd)
|
|
||||||
- `brushselected` [→](https://echarts.apache.org/en/api.html#events.brushselected)
|
|
||||||
- `globalcursortaken` [→](https://echarts.apache.org/en/api.html#events.globalcursortaken)
|
|
||||||
- `rendered` [→](https://echarts.apache.org/en/api.html#events.rendered)
|
|
||||||
- `finished` [→](https://echarts.apache.org/en/api.html#events.finished)
|
|
||||||
- Mouse events
|
|
||||||
- `click` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.click)
|
|
||||||
- `dblclick` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.dblclick)
|
|
||||||
- `mouseover` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.mouseover)
|
|
||||||
- `mouseout` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.mouseout)
|
|
||||||
- `mousemove` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.mousemove)
|
|
||||||
- `mousedown` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.mousedown)
|
|
||||||
- `mouseup` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.mouseup)
|
|
||||||
- `globalout` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.globalout)
|
|
||||||
- `contextmenu` [→](https://echarts.apache.org/en/api.html#events.Mouse%20events.contextmenu)
|
|
||||||
- ZRender events
|
|
||||||
- `zr:click`
|
|
||||||
- `zr:mousedown`
|
|
||||||
- `zr:mouseup`
|
|
||||||
- `zr:mousewheel`
|
|
||||||
- `zr:dblclick`
|
|
||||||
- `zr:contextmenu`
|
|
||||||
|
|
||||||
See supported events [here →](https://echarts.apache.org/en/api.html#events)
|
|
||||||
|
|
||||||
## CSP: `style-src` or `style-src-elem`
|
## CSP: `style-src` or `style-src-elem`
|
||||||
|
|
||||||
If you are applying a CSP to prevent inline `<style>` injection, you need to use files from `dist/csp` directory and include `dist/csp/style.css` into your app manually.
|
If you are applying a CSP to prevent inline `<style>` injection, you need to use files from `dist/csp` directory and include `dist/csp/style.css` into your app manually.
|
||||||
@ -507,3 +517,7 @@ pnpm serve
|
|||||||
```
|
```
|
||||||
|
|
||||||
Open `http://localhost:8080` to see the demo.
|
Open `http://localhost:8080` to see the demo.
|
||||||
|
|
||||||
|
## Notice
|
||||||
|
|
||||||
|
The Apache Software Foundation [Apache ECharts, ECharts](https://echarts.apache.org/), Apache, the Apache feather, and the Apache ECharts project logo are either registered trademarks or trademarks of the [Apache Software Foundation](https://www.apache.org/).
|
||||||
|
|||||||
@ -236,9 +236,9 @@ import "echarts";
|
|||||||
|
|
||||||
<!-- vue3Scripts:start -->
|
<!-- vue3Scripts:start -->
|
||||||
```html
|
```html
|
||||||
<script src="https://cdn.jsdelivr.net/npm/vue@3.3.7"></script>
|
<script src="https://cdn.jsdelivr.net/npm/vue@3.4.23"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3"></script>
|
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.6.7"></script>
|
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.7.3"></script>
|
||||||
```
|
```
|
||||||
<!-- vue3Scripts:end -->
|
<!-- vue3Scripts:end -->
|
||||||
|
|
||||||
@ -256,9 +256,9 @@ app.component('v-chart', VueECharts)
|
|||||||
|
|
||||||
<!-- vue2Scripts:start -->
|
<!-- vue2Scripts:start -->
|
||||||
```html
|
```html
|
||||||
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.15"></script>
|
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.16"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3"></script>
|
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.6.7"></script>
|
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.7.3"></script>
|
||||||
```
|
```
|
||||||
<!-- vue2Scripts:end -->
|
<!-- vue2Scripts:end -->
|
||||||
|
|
||||||
@ -381,6 +381,16 @@ Vue-ECharts 支持如下事件:
|
|||||||
|
|
||||||
请参考支持的事件列表。[前往 →](https://echarts.apache.org/zh/api.html#events)
|
请参考支持的事件列表。[前往 →](https://echarts.apache.org/zh/api.html#events)
|
||||||
|
|
||||||
|
#### 原生 DOM 事件
|
||||||
|
|
||||||
|
由于 Vue-ECharts 默认将事件绑定到 ECharts 实例,因此在使用原生 DOM 事件时需要做一些特殊处理。你需要在事件名称前加上 `native:` 前缀来绑定原生 DOM 事件(可以在 Vue 2 中也可以使用 `.native` 修饰符,但这在 Vue 3 中已被废弃)。
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<v-chart @native:click="handleClick" />
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
### Provide / Inject
|
### Provide / Inject
|
||||||
|
|
||||||
Vue-ECharts 为 `theme`、`init-options`、`update-options` 和 `loading-options` 提供了 provide/inject API,以通过上下文配置选项。例如:可以通过如下方式来使用 provide API 为 `init-options` 提供上下文配置:
|
Vue-ECharts 为 `theme`、`init-options`、`update-options` 和 `loading-options` 提供了 provide/inject API,以通过上下文配置选项。例如:可以通过如下方式来使用 provide API 为 `init-options` 提供上下文配置:
|
||||||
@ -464,6 +474,8 @@ import { THEME_KEY } from 'vue-echarts'
|
|||||||
|
|
||||||
静态方法请直接通过 [`echarts` 本身](https://echarts.apache.org/zh/api.html#echarts)进行调用。
|
静态方法请直接通过 [`echarts` 本身](https://echarts.apache.org/zh/api.html#echarts)进行调用。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## CSP: `style-src` 或 `style-src-elem`
|
## CSP: `style-src` 或 `style-src-elem`
|
||||||
|
|
||||||
如果你正在应用 CSP 来防止内联 `<style>` 注入,则需要使用 `dist/csp` 目录中的文件,并手动引入 `dist/csp/style.css`。
|
如果你正在应用 CSP 来防止内联 `<style>` 注入,则需要使用 `dist/csp` 目录中的文件,并手动引入 `dist/csp/style.css`。
|
||||||
@ -507,3 +519,7 @@ pnpm serve
|
|||||||
```
|
```
|
||||||
|
|
||||||
打开 `http://localhost:8080` 来查看 demo。
|
打开 `http://localhost:8080` 来查看 demo。
|
||||||
|
|
||||||
|
## 声明
|
||||||
|
|
||||||
|
The Apache Software Foundation [Apache ECharts, ECharts](https://echarts.apache.org/), Apache, the Apache feather, and the Apache ECharts project logo are either registered trademarks or trademarks of the [Apache Software Foundation](https://www.apache.org/).
|
||||||
|
|||||||
26
package.json
26
package.json
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "vue-echarts",
|
"name": "vue-echarts",
|
||||||
"version": "6.6.7",
|
"version": "6.7.3",
|
||||||
"description": "Vue.js component for Apache ECharts.",
|
"description": "Vue.js component for Apache ECharts™.",
|
||||||
"author": "GU Yiling <justice360@gmail.com>",
|
"author": "GU Yiling <justice360@gmail.com>",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"serve": "vue-cli-service serve",
|
"serve": "vue-cli-service serve",
|
||||||
@ -26,35 +26,35 @@
|
|||||||
"vue-demi": "^0.13.11"
|
"vue-demi": "^0.13.11"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.23.2",
|
"@babel/core": "^7.24.4",
|
||||||
"@highlightjs/vue-plugin": "^2.1.0",
|
"@highlightjs/vue-plugin": "^2.1.0",
|
||||||
"@rollup/plugin-node-resolve": "^15.2.3",
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
||||||
"@rollup/plugin-replace": "^5.0.5",
|
"@rollup/plugin-replace": "^5.0.5",
|
||||||
"@rollup/plugin-terser": "^0.4.4",
|
"@rollup/plugin-terser": "^0.4.4",
|
||||||
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
||||||
"@typescript-eslint/parser": "^4.33.0",
|
"@typescript-eslint/parser": "^4.33.0",
|
||||||
"@vercel/analytics": "^1.1.1",
|
"@vercel/analytics": "^1.2.2",
|
||||||
"@vue/cli-plugin-babel": "^5.0.8",
|
"@vue/cli-plugin-babel": "^5.0.8",
|
||||||
"@vue/cli-plugin-eslint": "^5.0.8",
|
"@vue/cli-plugin-eslint": "^5.0.8",
|
||||||
"@vue/cli-plugin-typescript": "^5.0.8",
|
"@vue/cli-plugin-typescript": "^5.0.8",
|
||||||
"@vue/cli-service": "^5.0.8",
|
"@vue/cli-service": "^5.0.8",
|
||||||
"@vue/compiler-sfc": "^3.3.7",
|
"@vue/compiler-sfc": "^3.4.24",
|
||||||
"@vue/composition-api": "^1.7.2",
|
"@vue/composition-api": "^1.7.2",
|
||||||
"@vue/eslint-config-prettier": "^6.0.0",
|
"@vue/eslint-config-prettier": "^6.0.0",
|
||||||
"@vue/eslint-config-typescript": "^10.0.0",
|
"@vue/eslint-config-typescript": "^10.0.0",
|
||||||
"@vueuse/core": "^10.5.0",
|
"@vueuse/core": "^10.9.0",
|
||||||
"comment-mark": "^1.1.1",
|
"comment-mark": "^1.1.1",
|
||||||
"core-js": "^3.33.2",
|
"core-js": "^3.37.0",
|
||||||
"echarts": "^5.4.3",
|
"echarts": "^5.5.0",
|
||||||
"echarts-gl": "^2.0.9",
|
"echarts-gl": "^2.0.9",
|
||||||
"echarts-liquidfill": "^3.1.0",
|
"echarts-liquidfill": "^3.1.0",
|
||||||
"esbuild-wasm": "^0.19.2",
|
"esbuild-wasm": "^0.19.12",
|
||||||
"eslint": "^7.32.0",
|
"eslint": "^7.32.0",
|
||||||
"eslint-plugin-prettier": "^3.4.1",
|
"eslint-plugin-prettier": "^3.4.1",
|
||||||
"eslint-plugin-vue": "^8.7.1",
|
"eslint-plugin-vue": "^8.7.1",
|
||||||
"highlight.js": "^11.9.0",
|
"highlight.js": "^11.9.0",
|
||||||
"pinia": "^2.1.7",
|
"pinia": "^2.1.7",
|
||||||
"postcss": "^8.4.31",
|
"postcss": "^8.4.38",
|
||||||
"postcss-loader": "^5.3.0",
|
"postcss-loader": "^5.3.0",
|
||||||
"postcss-nested": "^5.0.6",
|
"postcss-nested": "^5.0.6",
|
||||||
"prettier": "^2.8.8",
|
"prettier": "^2.8.8",
|
||||||
@ -67,9 +67,9 @@
|
|||||||
"rollup-plugin-ts": "^2.0.7",
|
"rollup-plugin-ts": "^2.0.7",
|
||||||
"tslib": "^2.6.2",
|
"tslib": "^2.6.2",
|
||||||
"typescript": "4.6.4",
|
"typescript": "4.6.4",
|
||||||
"vue": "^3.3.7",
|
"vue": "^3.4.24",
|
||||||
"vue2": "npm:vue@^2.7.15",
|
"vue2": "npm:vue@^2.7.16",
|
||||||
"webpack": "^5.89.0"
|
"webpack": "^5.91.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@vue/composition-api": "^1.0.5",
|
"@vue/composition-api": "^1.0.5",
|
||||||
|
|||||||
10934
pnpm-lock.yaml
generated
10934
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,12 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="">
|
<html lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||||
<link href="https://fonts.googleapis.com/css?family=Inter:300,500;display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css?family=Inter:300,500;display=swap" rel="stylesheet">
|
||||||
<title>Vue-ECharts: Vue.js component for Apache ECharts.</title>
|
<title>Vue-ECharts: Vue.js component for Apache ECharts™.</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<noscript>
|
<noscript>
|
||||||
|
|||||||
@ -10,8 +10,8 @@ function resolvePath(...parts) {
|
|||||||
const CDN_PREFIX = "https://cdn.jsdelivr.net/npm/";
|
const CDN_PREFIX = "https://cdn.jsdelivr.net/npm/";
|
||||||
|
|
||||||
const DEP_VERSIONS = {
|
const DEP_VERSIONS = {
|
||||||
"vue@3": "3.3.7",
|
"vue@3": "3.4.23",
|
||||||
"vue@2": "2.7.15",
|
"vue@2": "2.7.16",
|
||||||
echarts: "5.4.3",
|
echarts: "5.4.3",
|
||||||
[name]: version
|
[name]: version
|
||||||
};
|
};
|
||||||
|
|||||||
@ -6,7 +6,7 @@ const packageFile = path.resolve(__dirname, "../package.json");
|
|||||||
|
|
||||||
const typesPaths = {
|
const typesPaths = {
|
||||||
3: "dist/index.d.ts",
|
3: "dist/index.d.ts",
|
||||||
2.7: "dist/index.vue2-7.d.ts",
|
2.7: "dist/index.vue2_7.d.ts",
|
||||||
2: "dist/index.vue2.d.ts"
|
2: "dist/index.vue2.d.ts"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -37,7 +37,7 @@ import {
|
|||||||
useLoading,
|
useLoading,
|
||||||
loadingProps
|
loadingProps
|
||||||
} from "./composables";
|
} from "./composables";
|
||||||
import { omitOn, unwrapInjected } from "./utils";
|
import { isOn, omitOn, unwrapInjected } from "./utils";
|
||||||
import { register, TAG_NAME, type EChartsElement } from "./wc";
|
import { register, TAG_NAME, type EChartsElement } from "./wc";
|
||||||
import "./style.css";
|
import "./style.css";
|
||||||
|
|
||||||
@ -55,6 +55,8 @@ export const UPDATE_OPTIONS_KEY =
|
|||||||
"ecUpdateOptions" as unknown as InjectionKey<UpdateOptionsInjection>;
|
"ecUpdateOptions" as unknown as InjectionKey<UpdateOptionsInjection>;
|
||||||
export { LOADING_OPTIONS_KEY } from "./composables";
|
export { LOADING_OPTIONS_KEY } from "./composables";
|
||||||
|
|
||||||
|
const NATIVE_EVENT_RE = /(^&?~?!?)native:/;
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "echarts",
|
name: "echarts",
|
||||||
props: {
|
props: {
|
||||||
@ -95,9 +97,62 @@ export default defineComponent({
|
|||||||
() => props.updateOptions || unwrapInjected(defaultUpdateOptions, {})
|
() => props.updateOptions || unwrapInjected(defaultUpdateOptions, {})
|
||||||
);
|
);
|
||||||
const nonEventAttrs = computed(() => omitOn(attrs));
|
const nonEventAttrs = computed(() => omitOn(attrs));
|
||||||
|
const nativeListeners: Record<string, unknown> = {};
|
||||||
|
|
||||||
// @ts-expect-error listeners for Vue 2 compatibility
|
// @ts-expect-error listeners for Vue 2 compatibility
|
||||||
const listeners = getCurrentInstance().proxy.$listeners;
|
const listeners = getCurrentInstance().proxy.$listeners;
|
||||||
|
const realListeners: Record<string, any> = {};
|
||||||
|
|
||||||
|
if (!listeners) {
|
||||||
|
// This is for Vue 3.
|
||||||
|
// We are converting all `on<Event>` props to event listeners compatible with Vue 2
|
||||||
|
// and collect them into `realListeners` so that we can bind them to the chart instance
|
||||||
|
// later in the same way.
|
||||||
|
// For `onNative:<event>` props, we just strip the `Native:` part and collect them into
|
||||||
|
// `nativeListeners` so that we can bind them to the root element directly.
|
||||||
|
Object.keys(attrs)
|
||||||
|
.filter(key => isOn(key))
|
||||||
|
.forEach(key => {
|
||||||
|
// onClick -> c + lick
|
||||||
|
// onZr:click -> z + r:click
|
||||||
|
let event = key.charAt(2).toLowerCase() + key.slice(3);
|
||||||
|
|
||||||
|
// Collect native DOM events
|
||||||
|
if (event.indexOf("native:") === 0) {
|
||||||
|
// native:click -> onClick
|
||||||
|
const nativeKey = `on${event.charAt(7).toUpperCase()}${event.slice(
|
||||||
|
8
|
||||||
|
)}`;
|
||||||
|
|
||||||
|
nativeListeners[nativeKey] = attrs[key];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// clickOnce -> ~click
|
||||||
|
// zr:clickOnce -> ~zr:click
|
||||||
|
if (event.substring(event.length - 4) === "Once") {
|
||||||
|
event = `~${event.substring(0, event.length - 4)}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
realListeners[event] = attrs[key];
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// This is for Vue 2.
|
||||||
|
// We just need to distinguish normal events and `native:<event>` events and
|
||||||
|
// collect them into `realListeners` and `nativeListeners` respectively.
|
||||||
|
// For `native:<event>` events, we just strip the `native:` part and collect them
|
||||||
|
// into `nativeListeners` so that we can bind them to the root element directly.
|
||||||
|
// native:click -> click
|
||||||
|
// ~native:click -> ~click
|
||||||
|
// &~!native:click -> &~!click
|
||||||
|
Object.keys(listeners).forEach(key => {
|
||||||
|
if (NATIVE_EVENT_RE.test(key)) {
|
||||||
|
nativeListeners[key.replace(NATIVE_EVENT_RE, "$1")] = listeners[key];
|
||||||
|
} else {
|
||||||
|
realListeners[key] = listeners[key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function init(option?: Option) {
|
function init(option?: Option) {
|
||||||
if (!inner.value) {
|
if (!inner.value) {
|
||||||
@ -114,27 +169,6 @@ export default defineComponent({
|
|||||||
instance.group = props.group;
|
instance.group = props.group;
|
||||||
}
|
}
|
||||||
|
|
||||||
let realListeners = listeners;
|
|
||||||
if (!realListeners) {
|
|
||||||
realListeners = {};
|
|
||||||
|
|
||||||
Object.keys(attrs)
|
|
||||||
.filter(key => key.indexOf("on") === 0 && key.length > 2)
|
|
||||||
.forEach(key => {
|
|
||||||
// onClick -> c + lick
|
|
||||||
// onZr:click -> z + r:click
|
|
||||||
let event = key.charAt(2).toLowerCase() + key.slice(3);
|
|
||||||
|
|
||||||
// clickOnce -> ~click
|
|
||||||
// zr:clickOnce -> ~zr:click
|
|
||||||
if (event.substring(event.length - 4) === "Once") {
|
|
||||||
event = `~${event.substring(0, event.length - 4)}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
realListeners[event] = attrs[key];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.keys(realListeners).forEach(key => {
|
Object.keys(realListeners).forEach(key => {
|
||||||
let handler = realListeners[key];
|
let handler = realListeners[key];
|
||||||
|
|
||||||
@ -296,6 +330,7 @@ export default defineComponent({
|
|||||||
inner,
|
inner,
|
||||||
setOption,
|
setOption,
|
||||||
nonEventAttrs,
|
nonEventAttrs,
|
||||||
|
nativeListeners,
|
||||||
...publicApi
|
...publicApi
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@ -303,12 +338,14 @@ export default defineComponent({
|
|||||||
// Vue 3 and Vue 2 have different vnode props format:
|
// Vue 3 and Vue 2 have different vnode props format:
|
||||||
// See https://v3-migration.vuejs.org/breaking-changes/render-function-api.html#vnode-props-format
|
// See https://v3-migration.vuejs.org/breaking-changes/render-function-api.html#vnode-props-format
|
||||||
const attrs = (
|
const attrs = (
|
||||||
Vue2 ? { attrs: this.nonEventAttrs } : { ...this.nonEventAttrs }
|
Vue2
|
||||||
|
? { attrs: this.nonEventAttrs, on: this.nativeListeners }
|
||||||
|
: { ...this.nonEventAttrs, ...this.nativeListeners }
|
||||||
) as any;
|
) as any;
|
||||||
attrs.ref = "root";
|
attrs.ref = "root";
|
||||||
attrs.class = attrs.class ? ["echarts"].concat(attrs.class) : "echarts";
|
attrs.class = attrs.class ? ["echarts"].concat(attrs.class) : "echarts";
|
||||||
return h(TAG_NAME, attrs, [
|
return h(TAG_NAME, attrs, [
|
||||||
h("div", { ref: "inner", class: "echarts-inner" })
|
h("div", { ref: "inner", class: "vue-echarts-inner" })
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -76,7 +76,7 @@ const transformErrors = ref([]);
|
|||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await initialize({
|
await initialize({
|
||||||
wasmURL: "https://cdn.jsdelivr.net/npm/esbuild-wasm@0.19.2/esbuild.wasm"
|
wasmURL: "https://cdn.jsdelivr.net/npm/esbuild-wasm@0.19.12/esbuild.wasm"
|
||||||
});
|
});
|
||||||
|
|
||||||
initializing.value = false;
|
initializing.value = false;
|
||||||
|
|||||||
@ -297,7 +297,7 @@ input {
|
|||||||
}
|
}
|
||||||
|
|
||||||
label {
|
label {
|
||||||
display: flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
@ -311,7 +311,7 @@ select {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#logo {
|
#logo {
|
||||||
display: inline-block;
|
display: inline-flex;
|
||||||
width: 128px;
|
width: 128px;
|
||||||
height: 128px;
|
height: 128px;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
@ -381,11 +381,13 @@ select {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.actions {
|
.actions {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.renderer,
|
.renderer,
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import {
|
|||||||
LegendComponent,
|
LegendComponent,
|
||||||
TooltipComponent
|
TooltipComponent
|
||||||
} from "echarts/components";
|
} from "echarts/components";
|
||||||
import { shallowRef } from "vue";
|
import { computed, shallowRef } from "vue";
|
||||||
import VChart from "../../ECharts";
|
import VChart from "../../ECharts";
|
||||||
import VExample from "./Example";
|
import VExample from "./Example";
|
||||||
import getData from "../data/polar";
|
import getData from "../data/polar";
|
||||||
@ -22,6 +22,23 @@ use([
|
|||||||
|
|
||||||
const option = shallowRef(getData());
|
const option = shallowRef(getData());
|
||||||
const theme = shallowRef("dark");
|
const theme = shallowRef("dark");
|
||||||
|
const loading = shallowRef(false);
|
||||||
|
const loadingOptions = computed(() =>
|
||||||
|
theme.value === "dark"
|
||||||
|
? {
|
||||||
|
color: "#fff",
|
||||||
|
textColor: "#fff",
|
||||||
|
maskColor: "rgba(0, 0, 0, 0.7)"
|
||||||
|
}
|
||||||
|
: null
|
||||||
|
);
|
||||||
|
const style = computed(() => {
|
||||||
|
return theme.value === "dark"
|
||||||
|
? loading.value
|
||||||
|
? "background-color: #05040d"
|
||||||
|
: "background-color: #100c2a"
|
||||||
|
: "";
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -29,8 +46,10 @@ const theme = shallowRef("dark");
|
|||||||
<v-chart
|
<v-chart
|
||||||
:option="option"
|
:option="option"
|
||||||
autoresize
|
autoresize
|
||||||
|
:loading="loading"
|
||||||
|
:loading-options="loadingOptions"
|
||||||
:theme="theme"
|
:theme="theme"
|
||||||
:style="theme === 'dark' ? 'background-color: #100c2a' : ''"
|
:style="style"
|
||||||
/>
|
/>
|
||||||
<template #extra>
|
<template #extra>
|
||||||
<p class="actions">
|
<p class="actions">
|
||||||
@ -39,6 +58,10 @@ const theme = shallowRef("dark");
|
|||||||
<option :value="null">Default</option>
|
<option :value="null">Default</option>
|
||||||
<option value="dark">Dark</option>
|
<option value="dark">Dark</option>
|
||||||
</select>
|
</select>
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" v-model="loading" />
|
||||||
|
Loading
|
||||||
|
</label>
|
||||||
</p>
|
</p>
|
||||||
</template>
|
</template>
|
||||||
</v-example>
|
</v-example>
|
||||||
|
|||||||
@ -3,7 +3,17 @@ import { createApp } from "vue";
|
|||||||
import { createPinia } from "pinia";
|
import { createPinia } from "pinia";
|
||||||
import Demo from "./Demo.vue";
|
import Demo from "./Demo.vue";
|
||||||
|
|
||||||
inject();
|
const SAMPLE_RATE = 0.5;
|
||||||
|
|
||||||
|
inject({
|
||||||
|
beforeSend: event => {
|
||||||
|
if (Math.random() > SAMPLE_RATE) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const pinia = createPinia();
|
const pinia = createPinia();
|
||||||
const app = createApp(Demo);
|
const app = createApp(Demo);
|
||||||
|
|||||||
@ -1 +1,2 @@
|
|||||||
x-vue-echarts,.echarts-inner{display:block;width:100%;height:100%;min-width:0}
|
x-vue-echarts{display:flex;flex-direction:column;width:100%;height:100%;min-width:0}
|
||||||
|
.vue-echarts-inner{flex-grow:1;min-width:0;width:auto!important;height:auto!important}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { unref } from "vue-demi";
|
import { unref, isRef } from "vue-demi";
|
||||||
import type { Injection } from "./types";
|
import type { Injection } from "./types";
|
||||||
|
|
||||||
type Attrs = {
|
type Attrs = {
|
||||||
@ -26,7 +26,7 @@ export function unwrapInjected<T, V>(
|
|||||||
injection: Injection<T>,
|
injection: Injection<T>,
|
||||||
defaultValue: V
|
defaultValue: V
|
||||||
): T | V {
|
): T | V {
|
||||||
const value = unref(injection);
|
const value = isRef(injection) ? unref(injection) : injection;
|
||||||
|
|
||||||
if (value && typeof value === "object" && "value" in value) {
|
if (value && typeof value === "object" && "value" in value) {
|
||||||
return value.value || defaultValue;
|
return value.value || defaultValue;
|
||||||
|
|||||||
Reference in New Issue
Block a user