Vue-ECharts
Vue.js component for Apache ECharts.
Uses ECharts 5 and works for both Vue.js 2/3.
💡 Heads up 💡
If your project is using vue-echarts <= 5, you should read the Migration to v6 section before you update to v6.
Installation & Usage
npm & ESM
$ npm install echarts vue-echarts
To make vue-echarts work for Vue 2, you need to have @vue/composition-api installed:
npm i -D @vue/composition-api
Vue 3
import { createApp } from 'vue'
import ECharts from 'vue-echarts'
// import ECharts modules manually to reduce bundle size
import {
CanvasRenderer
} from 'echarts/renderers'
import {
BarChart
} from 'echarts/chart'
import {
GridComponent,
TooltipComponent
} from 'echarts/components'
const app = createApp(...)
// register globally (or you can do it locally)
app.component('v-chart', ECharts)
app.mount(...)
Vue 2
import Vue from 'vue'
import ECharts from 'vue-echarts'
// import ECharts modules manually to reduce bundle size
import {
CanvasRenderer
} from 'echarts/renderers'
import {
BarChart
} from 'echarts/chart'
import {
GridComponent,
TooltipComponent
} from 'echarts/components'
// register globally (or you can do it locally)
Vue.component('v-chart', ECharts)
new Vue(...)
We encourage manually importing components and charts from ECharts for smaller bundle size. See all supported renderers/charts/components here →
But if you really want to import the whole ECharts bundle without having to import modules manually, just add this in your code:
import "echarts";
CDN & Global variable
Drop <script> inside your HTML file as follows:
Vue 3
<script src="https://cdn.jsdelivr.net/npm/vue@3.0.5"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-demi@0.6.0"></script>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.0.2"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.0.0-alpha.1"></script>
Vue 2
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
<script src="https://cdn.jsdelivr.net/npm/@vue/composition-api@1.0.0-rc.2"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-demi@0.6.0"></script>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.0.2"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.0.0-alpha.1"></script>
Vue-ECharts is exposed as window.VueECharts in this mode.
Vue 3
const app = Vue.createApp(...)
// register globally (or you can do it locally)
app.component('v-chart', ECharts)
Vue 2
// register globally (or you can do it locally)
Vue.component("v-chart", VueECharts);
See more examples here.
Props
-
init-options: objectOptional chart init configurations. See
echarts.init'soptsparameter here →Injection key:
INIT_OPTIONS_KEY. -
theme: string | objectTheme to be applied. See
echarts.init'sthemeparameter here →Injection key:
THEME_KEY. -
option: objectECharts' universal interface. Modifying this prop will trigger ECharts'
setOptionmethod. Read more here → -
update-options: objectOptions for updating chart option. See
echartsInstance.setOption'soptsparameter here →Injection key:
UPDATE_OPTIONS_KEY. -
group: stringGroup name to be used in chart connection. See
echartsInstance.grouphere → -
autoresize: boolean(default:false)Whether the chart should be resized automatically whenever its root is resized.
-
loading: boolean(default:false)Whether the chart is in loading state.
-
loading-options: objectConfiguration item of loading animation. See
echartsInstance.showLoading'soptsparameter here →Injection key:
LOADING_OPTIONS_KEY. -
manual-update: boolean(default:false)For performance critical scenarios (having a large dataset) we'd better bypass Vue's reactivity system for
optionprop. By specifyingmanual-updateprop withtrueand not providingoptionprop, the dataset won't be watched any more. After doing so, you need to retrieve the component instance withrefand manually callsetOptionmethod to update the chart.
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 3
import { INIT_OPTIONS_KEY } from 'vue-echarts'
import { provide } from 'vue'
// composition API
provide(INIT_OPTIONS_KEY, ...)
// options API
{
provide: {
[INIT_OPTIONS_KEY]: { ... }
}
}
Vue 2
import { INIT_OPTIONS_KEY } from 'vue-echarts'
// in component options
{
provide: {
[INIT_OPTIONS_KEY]: { ... }
}
}
Methods
setOption→getWidth→getHeight→getDom→getOption→resize→dispatchAction→convertToPixel→convertFromPixel→showLoading→hideLoading→containPixel→getDataURL→getConnectedDataURL→clear→dispose→
Static Methods
Static methods can be accessed from echarts itself.
Events
Vue-ECharts support the following events:
highlight→downplay→selectchanged→legendselectchanged→legendselected→legendunselected→legendselectall→legendinverseselect→legendscroll→datazoom→datarangeselected→timelinechanged→timelineplaychanged→restore→dataviewchanged→magictypechanged→geoselectchanged→geoselected→geounselected→axisareaselected→brush→brushEnd→brushselected→globalcursortaken→rendered→finished→- Mouse events
- ZRender events
zr:clickzr:mousedownzr:mouseupzr:mousewheelzr:dblclickzr:contextmenu
See supported events here →.
Migration to v6
The following breaking changes are introduced in vue-echarts@6:
Vue 2 support
- Now
@vue/composition-apiis required to be installed to use Vue-ECharts with Vue 2.
Props
optionsis renamed tooptionto align with ECharts itself.- Updating
optionwill respectupdate-optionsconfigs instead of checking reference change. watch-shallowis removed. Usemanual-updatefor performance critical scenarios.
Methods
mergeOptionsis renamed tosetOptionto align with ECharts itself.showLoadingandhideLoadingis removed. Use theloadingandloading-optionsprops instead.appendDatais removed. (Due to ECharts 5's breaking change.)- All static methods are removed from
vue-echarts. Use those methods fromechartsdirectly.
Computed getters
- Computed getters (
width,height,isDisposedandcomputedOptions) are removed. Use thegetWidth,getHeight,isDisposedandgetOptionmethods instead.
Styles
- Now the root element of the component have
100%×100%size by default, instead of600×400.
Local development
$ npm i
$ npm run serve
Open http://localhost:8080 to see the demo.