<!-- 自定义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. Spring cloud微服务安全实战-5-5实现授权码认证流程(1)

    目前为止已经完成了完整的用户逻辑 目前的问题是,用户在登陆的时候,用户名提交的是给前端服务器的.每个前端服务器的开发人员都可能接触到前端的用户名密码. 每一个客户端应用都要去处理登陆的逻辑,一单我的登 ...

  2. 全面系统Python3入门+进阶-1-3 我为什么喜欢Python

    结束

  3. Hadoop记录-部署hadoop环境shell实现

    #!/bin/bash menu() { echo "---欢迎使用hadoop部署管理程序---" echo "# 1.初始化Linux环境" echo &q ...

  4. 【WebView】Android WebView中的Cookie操作

    Hybrid App(混合式应用)的开发过程中少不了与WebView的交互,在涉及到账户体系的产品中,包含了一种登录状态的传递.比如,在Native(原生)界面的登录操作,进入到Web界面时,涉及到账 ...

  5. v关于使用Glide加载图片失败时显示自己特定的图片

    Glide是Android加载图片的一个框架. 常用加载图片到imageView:Glide.with(this).load(url).into(ImageView imageview). 当加载失败 ...

  6. 转 【MySQL】常用拼接语句 shell 下执行mysql 命令

    [MySQL]常用拼接语句 前言:在MySQL中 CONCAT ()函数用于将多个字符串连接成一个字符串,利用此函数我们可以将原来一步无法得到的sql拼接出来,在工作中也许会方便很多,下面主要介绍下几 ...

  7. WebSocket接收音频,并推送到声卡上

    使用信息 import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableM ...

  8. express获取http参数

    express获取参数有三种方法:官网介绍如下 Checks route params (req.params), ex: /user/:id Checks query string params ( ...

  9. 【转载】我为什么放弃了 Linux 内核学习?

    最近学习内核很是心累,碰巧看到这篇文章,有点意思~ 转自http://happypeter.github.io/index.html,以下为原文内容: 我在国内的技术类网站 / 博客上, 时常会看到分 ...

  10. caffe windows10 vs2015 cuda8.0 ->vs2013

    http://blog.csdn.net/xjz18298268521/article/details/52190184 http://www.cnblogs.com/xuanyuyt/p/57269 ...