<!-- 自定义Echarts
* options: Object,//数据
* theme: String,//主题
* initOptions: Object,//初始化
* group: String,//分组
* autoResize: Boolean,//自适应
* modules: Array,//模型
-->
<template>
<div style="height: 100%;width:100%"></div>
</template>
<script>
// enumerating ECharts events for now
const ACTION_EVENTS = [
'legendselectchanged',
'legendselected',
'legendunselected',
'datazoom',
'datarangeselected',
'timelinechanged',
'timelineplaychanged',
'restore',
'dataviewchanged',
'magictypechanged',
'geoselectchanged',
'geoselected',
'geounselected',
'pieselectchanged',
'pieselected',
'pieunselected',
'mapselectchanged',
'mapselected',
'mapunselected',
'axisareaselected',
'brush',
'brushselected'
];
const MOUSE_EVENTS = [
'click',
'dblclick',
'mouseover',
'mouseout',
'mousedown',
'mouseup',
'globalout'
];
export default {
props: {
options: Object,
theme: String,
initOptions: Object,
group: String,
autoResize: Boolean,
modules: Array
},
data () {
return {
chart: null,
}
},
computed: { // 数据驱动,不更新DOM
width: {
cache: false,
get () {
return this.chart.getWidth()
}
},
height: {
cache: false,
get () {
return this.chart.getHeight()
}
},
isDisposed: {
cache: false,
get () {
return this.chart.isDisposed()
}
}
},
watch: {// 通过监听参数:options、group进行重绘
options: {
handler (options) {
if (!this.chart && options) {
this.echartInit();
} else {
this.chart.setOption(this.options, true);
}
},
deep: true
},
group: {
handler (group) {
this.chart.group = group
}
}
},
methods: {
// 设置数据
mergeOptions (options) {
this._delegateMethod('setOption', options)
},
// 是否重新绘制
resize (options) {
this._delegateMethod('resize', options)
},
dispatchAction (payload) {
this._delegateMethod('dispatchAction', payload)
},
convertToPixel (finder, value) {
return this._delegateMethod('convertToPixel', finder, value)
},
convertFromPixel (finder, value) {
return this._delegateMethod('convertFromPixel', finder, value)
},
containPixel (finder, value) {
return this._delegateMethod('containPixel', finder, value)
},
showLoading (type, options) {
this._delegateMethod('showLoading', type, options)
},
hideLoading () {
this._delegateMethod('hideLoading')
},
getDataURL (options) {
return this._delegateMethod('getDataURL', options)
},
getConnectedDataURL (options) {
return this._delegateMethod('getConnectedDataURL', options)
},
clear () {
this._delegateMethod('clear')
},
dispose () {
this._delegateMethod('dispose')
},
_delegateMethod (name, ...args) {
if (!this.chart) {
return
}
return this.chart[name](...args)
},
echartInit () { // 按需引入
if (this.chart) return false;
import('echarts').then(({ init }) => {
const { $el, theme, initOptions, group, options, autoResize, _resizeHanlder } = this
let chart = init($el, theme, initOptions);
if (group) {
chart.group = group
}
chart.setOption(options, true);
// 自定义点击事件回调
ACTION_EVENTS.forEach(event => {
chart.on(event, params => {
this.$emit(event, params)
})
});
// 自定义鼠标事件回调
MOUSE_EVENTS.forEach(event => {
chart.on(event, params => {
this.$emit(event, params)
})
});
if (autoResize) {
window.addEventListener('resize', _resizeHanlder, false)
}
this.chart = chart;
console.log('加载成功', chart)
}).catch(_ => {
console.log('加载失败')
})
},
_resizeHanlder () {
window.setTimeout(() => {
this.chart.resize()
}, 100)
}
},
mounted () { // 初始化
if (this.options) {
this.echartInit()
}
},
beforeDestroy () {
if (!this.chart) {
return
}
if (this.autoResize) {
window.removeEventListener('resize', this._resizeHanlder, false)
}
this.dispose()
},
connect (group) {
const { chart } = this;
if (typeof group !== 'string') {
group = group.map(chart => chart.chart)
}
this.chart.connect(group)
},
disconnect (group) {
this.chart.disConnect(group)
},
registerMap (...args) {
this.chart.registerMap(...args)
},
registerTheme (...args) {
this.chart.registerTheme(...args)
}
}
</script>

echart——vue封装成公共组件的更多相关文章

  1. angular8 集成swiper, 并将swiper封装成公共组件

    安装Swiper npm install swiper --save 或者 yarn add swiper --save 在angular.json文件添加swiper.js和swiper.css   ...

  2. Asp.net Core中使用NLog,并封装成公共的日志方法

    1.安装NLog "NLog.Extensions.Logging": "1.0.0-rtm-alpha4" 2.配置NLog public void Conf ...

  3. vue封装一些常用组件loading、switch、progress

    vue封装一些常用组件loading.switch.progress github文档https://github.com/zengjielin/vue-component-library loadi ...

  4. 【小程序】---- 封装Echarts公共组件,遍历图表实现多个饼图

    一.问题描述: 在小程序的项目中,封装公共的饼图组件,并在需要的页面引入使用.要求一个页面中有多个饼图,动态渲染不同的数据. 二.效果实现: 1. 查看——小程序使用Echarts的方式 2. 封装饼 ...

  5. element-dialog封装成子组件

    1.父组件 <template> <card-layout :title="L('Users')" :actions="actions" @c ...

  6. Vue 封装的noData组件

    <template> <div :style="{color: fontColor}" :class="['noDataView', iconType] ...

  7. Vue 封装的loading组件

    <template> <div class="loadEffect"> <span></span> <span>< ...

  8. webpack 多页面支持 & 公共组件单独打包

    webpack - 多页面/入口支持 & 公共组件单独打包 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二:webpack 介绍&安装 we ...

  9. webpack 多页面|入口支持和公共组件单独打包--转载

    转载自:http://www.jb51.net/article/117490.htm 本篇主要介绍:如何自动构建入口文件,并生成对应的output:公共js库如何单独打包. 多入口文件,自动扫描入口. ...

随机推荐

  1. STL补充--set集合相等判断

    一:问题引出 #include <iostream> #include <map> #include <set> using namespace std; map& ...

  2. 戒邪淫利器:《楞严经 四种清净明诲》实例及原经文 (转自学佛网:http://www.xuefo.net/nr/article55/545256.html)

    今日得持首楞严,不读天下糟粕书! 当你读完楞严经后就会很真实的升起这个感觉!根本觉得其他书都是多余的!所以<楞严经>还是要多读,多看!并且<楞严经>戒淫的效果特别好!好好的珍惜 ...

  3. 测试框架nunit之assertion断言使用详解

    任何xUnit工具都使用断言进行条件的判断,NUnit自然也不例外,与其它的xUnit(如Junit.phpUnit.pythonUnit)相比,由于大量使用了Generic.Attribute等语言 ...

  4. Ubuntu18安装虚拟机virtualbox

    环境查看 安装虚拟机 apt install virtualbox 图形化界面启动 virtualbox 其余创建虚拟机和安装和在Windows安装配置一样,不详述.

  5. addEventListener兼容性问题

    参考链接:https://blog.csdn.net/lililiaaa/article/details/83960924

  6. 捕捉AVPlayerViewController 系统原生工具栏的出现、隐藏事件

    需求前提 1. app内轻量级的视频播放功能,故不希望引入“过度开发.过度封装”的第三方控件组,使用原生的AVPlayerViewController 2. 工具栏有新增控件需求,如下载按钮 等 3. ...

  7. MySQL的索引有哪些

    一.索引是什么 索引,在MySQL中也叫“键(key)”,是存储引擎用于快速找到记录的一种数据结构.如果把数据库的一张表比作一本书,那索引则是这本书的目录,通过目录,我们能快速找到我们想要的主题所对应 ...

  8. 以环形角度理解php数组索引

    array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] ) : ...

  9. django初识1

    django django初识 django的本质就是基于socket通信 一.127.0.0.1 本地回环地址 后面:8001是端口号 /ppt是根目录下的ppt子网页 二./当前网站的客户端(根目 ...

  10. Linux基础-03-用户、群组

    1. 用户及passwd文件 1) /etc/passwd文件的功能:存储所有用户的相关信息,该文件也被称为用户信息数据库(Database). 2) /etc/passwd文件每个字段的具体含义: ...