# Vue-ECharts > Vue.js component for Apache ECharts. > [πŸ‡¨πŸ‡³ δΈ­ζ–‡η‰ˆ](./README.zh-Hans.md) Uses [Apache ECharts](http://echarts.baidu.com/index.html) 5 and works for both [Vue.js](https://vuejs.org/) 2/3. ## πŸ’‘ Heads up πŸ’‘ If you are migrating from `vue-echarts` ≀ 5, you should read the _[Migration to v6](#migration-to-v6)_ section before you update to v6. Not ready yet? Read documentation for older versions [here β†’](https://github.com/ecomfe/vue-echarts/tree/5.x) ## Installation & Usage ### npm & ESM ```bash $ npm install echarts vue-echarts ``` To make `vue-echarts` work for Vue 2, you need to have `@vue/composition-api` installed: ```sh npm i -D @vue/composition-api ```
Vue 3 ```js 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/charts' 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 ```js 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/charts' 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 β†’](https://github.com/apache/echarts/blob/master/src/echarts.all.ts) But if you really want to import the whole ECharts bundle without having to import modules manually, just add this in your code: ```js import "echarts"; ``` #### SFC example
Vue 3 ```vue ``` [Demo β†’](https://codesandbox.io/s/charming-night-2y6m6?file=/src/App.vue)
Vue 2 ```vue ``` [Demo β†’](https://codesandbox.io/s/suspicious-glitter-mk66j?file=/src/App.vue)
### CDN & Global variable Drop ` ``` ```js const app = Vue.createApp(...) // register globally (or you can do it locally) app.component('v-chart', VueECharts) ``` [Demo β†’](https://codesandbox.io/api/v1/sandboxes/define?parameters=N4IgZglgNgpgziAXKCA7AJjAHgOgBYAuAtlEqAMYD2qBMNSIAPAIQAiA8gMIAqAmgAoBRAASESAPgA6qRmKhSZeGAEN0CxnAIBPWAoDEygA6HhwacNEwIAc0KJhAFgAMTw1gDc0gL7TGAek0dGHU_JVV1ACNKdC11dAgAN2EIdABeSRAjQwyFC0YEgFpyPGUAJwJhZQBXAkpS-AgALxhhREpDAghqdJB2zuoMvxD4hPU4clKIDuE4UvIewgJDOEQ_P3J0VBwAKzhMKETSnFQYAj9UQyI_BKqYAAEAZhwnHAB2HP9xyY6xiamK2bzDKLZardabHZ7GAHBJHE5nC5XGDFMoEOB3ACszxwACYPgE_j9fF9_jM5gsCEsVmsNltdvtDsdTudLtdbgVkSVyuiAGzYpwFOY4ACM-JJRJk4oICgAarccBMVLQAILGAAUZlQFnQygIyjVAEpTOYLMJ6gQqqUtZrTaa-l1UPYbbbTbQsAQAMraWBOk0u01gagEABiyiI0C09gA5ABJGgwUoAGmEGQAEtCEqcIORlMIAHIwW4ZZPKybKKDJuDKVBwApwBMQMBRv0uryJlu2zoEH3GrX-13YAj2DLcUrKMCQcjCD2US3keDFjsu2BgIcpkDz-OlDJLixt3fCWqUKCdQy-vv9w-TazWBPDkAQWhERcX_uB0pEXW0Ur34DKLzCIwESlEMwARABTrkABGroF4ACkBo7q-tr7shpqwLeGDnpeFh1BAdBrhkmblNm5YvjhwgroRIBUeROE6nq9gANoHraGSsBA9TkAQdEURkgiftAvE4RkyroPmpwAO51AA1nAwmXhkMopDAlDCGJ8kgO2aH-hkHoqHMeDCIIqDWGgC4gKxwgALoHqhl71pM8DMVZzoUagYYwPeo7jpO06znMFnaRRFjaIYXnroY-EKf2Y7xFUKzrhiGJwTF_qbt-LkgBiTipVp648rlGTWcFIUMcoLk6f2wDCAk5a3PYDwPBiyYeUQEXsZxyI8SAwj2SFFg1XVUANcIDzCk4rWefeAnKEJvX9QNQ31RFOIPA4U3tfeYkSQQ0mlHJGR9aVS21St9jCs1m0dSAymYGpGlHYtIXLSNEXChiDgABzXfe-llMUxmmeZml9VZFgleDwgwEQhglHAECJW5IWPjDXpBNhA2mnAJToJQkkAEIjT-wgTSdWM46o-PsBO9YEAAGvYk1Q7alN45JnDHnU96lNYET6pNwiC8LOAYohllVf6PiS6a0sUXL_a2WhCt7p4fbS14iF9gqlCw9QBFqkRRRcj1yZyjAgicCbcBaxYOBELONCGyABjGBkBpq58hLSr4fhRDEIRyOIIBeKHQA)
Vue 2 ```html ``` ```js // register globally (or you can do it locally) Vue.component("v-chart", VueECharts); ``` [Demo β†’](https://codesandbox.io/api/v1/sandboxes/define?parameters=N4IgZglgNgpgziAXKCA7AJjAHgOgBYAuAtlEqAMYD2qBMNSIAPAIQAiA8gMIAqAmgAoBRAASESAPgA6qRmKhSZeGAEN0CxnAIBPWAoDEygA6HhwacNEwIAc0KJhAFgAMTw1gDc0gL7TGAek0dGHU_JVV1ACNKdC11dAgAN2EIdABeSRAjQwyFC0YEgFpyPGUAJwJhZQBXAkpS-AgALxhhREpDAghqdJB2zuoMvxD4hPU4clKIDuE4UvIewgJDOEQ_P3J0VBwAKzhMKETSnFQYAj9UQyI_BKqYAAEAJhwANhwARgec_3HJjrGJqYVWbzDKLZardabHZ7GAHBJHE5nC5XO43GDrShEQyUOAQfqoApGCB3N44JxkgpzHAAZi-AQBf18P0BMzmCwISxWaw2W12-0Ox1O50ufhgxTKBDgdwArGScJ8QOJvgyCP9fkC2aCOeDuVC-bCBYjhVc0QUxSVylLXuSnJTyO86czGTInarpAA1W44KhY6h0AgACgyhXF5QyABphJ6YIJOBbJQBKTyoaQnADuUduAbMqAssPsGQMxgj5mE6GUBGUAYTplLFnqBCqpVzOYsbeEfS6qHsrfbbdoWAIAGVtLAe3W-xYwNQCAAxZREaBaewAcgAkjQYKVIxkABKwhKnCDkZTCAByMFuEeEAEFJsooJG4MpUHACnAtxAwCuJ-2vOHf37PEx1rXNJ37bACALEBuFKZQwEgchhCHSgm3IeASzA8DhFgMAoOEDJ0M3UoMkAix_zI4RakoKBOkMccsPAghJmsawt2gvEYCITDsKnOoiArWhSmg4BlC8YRGAiUohmACJxJ7chxOzdAvAAUgTUjGL_ACtLbWA2IwBjeI7SZ_Wgw9ymPB8eN43D8IyOybOw8tK3sABtSj2wyVgIHqcgCCc3iMkEAToEC7CMhvdBz1ONM6gAazgcLwIyd0UhgShb3QJKQB04yLAyIcVDmPBhEEVBrDQDCQE84QAF1KIo3SLA_UyVmEDzmrbXtjNQBcYGg2D4MQ5DULmaq8vy7RDAGgiQEMCAYGSyc4PiKp2oyaVpVU5a-yIoT3M2pwdtyubnmOjI6sm4yXOUQ6usnYBhASB9bnsalqWlSM-qIWbvN8sUApAYQmvy7rnte2bqTeJxvv66CQuUMLgdBsHTAhqA3uEB5qQcOHfugqKYoIOLSkSjIQeu_KnpezHZreT78b-kA0swTKopyynavbGnIfsN5pQcAAOJnoKKspijKiqqs5nwHrbK7ueELjDBKXF2p6_LOKIEcgiMtGWpKdBKDTAAhTHhOEGGqbBuAjZN9gEI_AgAA17FhpX2zt1QTc4Gi6mg0prAiKtYeEMOI5waUNJq-W_yVuXjMT8CGt05PyOTcjvCTXx6XVEIohiEI5HEEAvHLoA)
See more examples [here](https://github.com/ecomfe/vue-echarts/tree/main/src/demo). ### Props - `init-options: object` Optional chart init configurations. See `echarts.init`'s `opts` parameter [here β†’](https://echarts.apache.org/en/api.html#echarts.init) Injection key: `INIT_OPTIONS_KEY`. - `theme: string | object` Theme to be applied. See `echarts.init`'s `theme` parameter [here β†’](https://echarts.apache.org/en/api.html#echarts.init) Injection key: `THEME_KEY`. - `option: object` ECharts' universal interface. Modifying this prop will trigger ECharts' `setOption` method. Read more [here β†’](https://echarts.apache.org/en/option.html) - `update-options: object` Options for updating chart option. See `echartsInstance.setOption`'s `opts` parameter [here β†’](https://echarts.apache.org/en/api.html#echartsInstance.setOption) Injection key: `UPDATE_OPTIONS_KEY`. - `group: string` Group name to be used in chart [connection](https://echarts.apache.org/en/api.html#echarts.connect). See `echartsInstance.group` [here β†’](https://echarts.apache.org/en/api.html#echartsInstance.group) - `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: object` Configuration item of loading animation. See `echartsInstance.showLoading`'s `opts` parameter [here β†’](https://echarts.apache.org/en/api.html#echartsInstance.showLoading) 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 `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. ### 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 ```js 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 ```js import { INIT_OPTIONS_KEY } from 'vue-echarts' // in component options { provide: { [INIT_OPTIONS_KEY]: { ... } } } ```
### Methods - `setOption` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.setOption) - `getWidth` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.getWidth) - `getHeight` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.getHeight) - `getDom` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.getDom) - `getOption` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.getOption) - `resize` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.resize) - `dispatchAction` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.dispatchAction) - `convertToPixel` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.convertToPixel) - `convertFromPixel` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.convertFromPixel) - `containPixel` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.containPixel) - `showLoading` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.showLoading) - `hideLoading` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.hideLoading) - `containPixel` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.containPixel) - `getDataURL` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.getDataURL) - `getConnectedDataURL` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.getConnectedDataURL) - `clear` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.clear) - `dispose` [β†’](https://echarts.apache.org/en/api.html#echartsInstance.dispose) ### Static Methods Static methods can be accessed from [`echarts` itself](https://echarts.apache.org/en/api.html#echarts). ### Events 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) ## Migration to v6 > πŸ’‘ Please make sure to read the [migration guide](https://echarts.apache.org/en/tutorial.html#ECharts%205%20Upgrade%20Guide) for ECharts 5 as well. The following breaking changes are introduced in `vue-echarts@6`: ### Vue 2 support - Now `@vue/composition-api` is required to be installed to use Vue-ECharts with Vue 2. ### Props - `options` is renamed to **`option`** to align with ECharts itself. - Updating `option` will respect **`update-options`** configs instead of checking reference change. - `watch-shallow` is removed. Use **`manual-update`** for performance critical scenarios. ### Methods - `mergeOptions` is renamed to **`setOption`** to align with ECharts itself. - `showLoading` and `hideLoading` is removed. Use the **`loading` and `loading-options`** props instead. - `appendData` is removed. (Due to ECharts 5's breaking change.) - All static methods are removed from `vue-echarts`. Use those methods from `echarts` directly. ### Computed getters - Computed getters (`width`, `height`, `isDisposed` and `computedOptions`) are removed. Use the **`getWidth`, `getHeight`, `isDisposed` and `getOption`** methods instead. ### Styles - Now the root element of the component have **`100%Γ—100%`** size by default, instead of `600Γ—400`. ## Local development ```bash $ npm i $ npm run serve ``` Open `http://localhost:8080` to see the demo.