博客
关于我
vuejs集成echarts的一些问题
阅读量:443 次
发布时间:2019-03-06

本文共 1717 字,大约阅读时间需要 5 分钟。

        最近在做Beetlex的数据分析平台,在开发这个产品过程中涉及到大量的数据图表展示功能;由于产品前端使用的是vuejs开发,所以在集成echarts或多或少会碰到一些问题,在这里主要讲解一下碰到的问题和解决方法。

        在讲解之前先分享一下实际使用效果。具体可以查看

控件ID

        在vuejs中往往会对常用的功能进行组件封装,同样为了让不同图表复用所以也封装成组件来使用。在这个封装过程存在一个问题就是图表元素DIV的ID问题,所以组件建构建图表DIV的ID也必须确保唯一性。可以通过封装一个简单的函数来生成ID

Vue.prototype.$getID = function () {    page.controlid = page.controlid + 1;    return page.controlid;};

通过这个方法来获取动态的元素ID

mounted(){     this.ChatID = "chat_" + this.$getID();}

          

初始化问题

        在使用Vuejs时很多时候会在mounted()方法中进行一些实始化,但如果在这里实始化echarts就需要注意,毕竟mounted并不代表所有元素被构建,这时候会导致获取元素失败无法对echarts进行初始化操作。所以需要把echarts放到一个方法中根据情况手动调用进行,或者延时一下调用初始化;为了方便选择使用了setTimeout来初始化。

setTimeout(() => {                var dom = document.getElementById(this.ChatID);                this.Chat = echarts.init(dom, 'macarons');                this.Chat.setOption(this.ChatOption, true);            }, 300);

显示切换问题

        如果需要对图表进行一个显示切换,最好不要用v-if这样的语法,因为这样的语法是不会在DOM中构建相关元素,引起echarts创建Canvas元素问题导致无法正常工作。最好的办法是通过切换Css的方式来进行显示切换,确保已构建的DOM元素内容没有被更改。

自适应布局

        很多时候窗体的大变化和组件切换后会导致echarts无法适应当前布局,碰到这情况需要手动调用echarts的resize方法来进行重置显示布局。实际上在SPA应用中情况复杂很多,全屏显示,窗体要换,再加组件化后多层次嵌套,所以难以确定echarts使用在什么地方。为了满足不同情况的需求,需要一个公共的行为来触发这些变更。

var __resizeHandlers = [];function __addResizeHandler(handler) {    __resizeHandlers.push(handler);};function __resize() {    setTimeout(() => {        __resizeHandlers.forEach(v => {            v();        });    }, 100);}window.onresize = function () {    __resizeHandlers.forEach(v => {        v();    });};Vue.prototype.$addResize = function (handler) {    __addResizeHandler(handler);};Vue.prototype.$resize = function () {    __resize();};

实现一个简单的resize注册和调用机制即可,在使用echarts的组件定义以下代码完美解决

this.$addResize(r => {     if (this.Chat)            this.Chat.resize();});
 

转载地址:http://nwxfz.baihongyu.com/

你可能感兴趣的文章
事件总线知多少(2)
查看>>
ES 32 - Elasticsearch 数据建模的探索与实践
查看>>
Java - Java开发中的安全编码问题
查看>>
JMeter 中实现发送Java请求
查看>>
Python 利用Python操作excel表格之openyxl介绍Part1
查看>>
Python 一键拉取Git分支源码自动解析并执行SQL语句
查看>>
redis redis常用命令及内存分析总结(附RedisClient工具简介
查看>>
Jenkins Jenkins结合GIT Maven持续集成环境配置
查看>>
Java win7或 xp下配置JDK环境变量
查看>>
排错-lr回放错误Vuser failed to initialize extensi...解决方法
查看>>
Loadrunner 脚本优化-事务函数简介
查看>>
loadrunner 脚本优化-参数化方法
查看>>
Easyui datagrid combobox输入框非法输入判断与事件总结
查看>>
Vue 使用Use、prototype自定义全局插件
查看>>
我,管理100多人技术团队的二三事
查看>>
webpack 的 sourse-map 中 eval、cheap、inline 和 module 各是什么意思?
查看>>
设计模式点滴
查看>>
《天风文章》V1.0.0使用说明
查看>>
许久没来了...
查看>>
javascript 实现页面上禁止选择(复制)
查看>>