echarts toolbox 擴(kuò)展

前言##

echarts是百度前端團(tuán)隊推出的一個非常強(qiáng)大的開源圖表庫,我最近在重構(gòu)的一個內(nèi)部后臺系統(tǒng)也用到了echarts,但是梳理老代碼的時候發(fā)現(xiàn)有人居然改了node_modules/echarts里面的代碼??。梳理了一下功能,其實(shí)當(dāng)時的需求就只想把“保存圖片”的那個按鈕的邏輯改為下載excel(也不知道為什么產(chǎn)品要在這個位置放導(dǎo)excel的按鈕...)。

ecahrts中的toolbox

開始##

我順著echarts找到了toolbox模塊,在node_modules/lib/component/toolbox/feature 下面有幾個文件就是echarts toolbox已有的一些功能。發(fā)現(xiàn)幾個功能都是需要實(shí)現(xiàn)同樣一套接口來添加對應(yīng)的按鈕和功能,于是照葫蘆畫瓢,按照SaveAsImage.js 里面的代碼實(shí)現(xiàn)一個類似的下載excel的工具。需要給class指定一個類屬性defaultOption為默認(rèn)配置,需要實(shí)現(xiàn)onclick方法。

SaveAsExcel.js

/**
 * @Author: lyan
 * @Date:   2017-06-30T12:40:29+08:00
 * @Email:  liu-yaner@foxmail.com
 * @Description: 擴(kuò)展echarts 的tool box,增加導(dǎo)出excel功能
 */

// 環(huán)境判斷
var env = require('zrender/lib/core/env');

export default class SaveAsExcel {
    constructor(model) {
        this.model = model;
    }

    get unusable() {
        return !env.canvasSupported;
    }

    onclick() {
        const model = this.model;
        const url = model.get('url');
        window.open(url);
    }
}

// 默認(rèn)配置
SaveAsExcel.defaultOption = {
    show: true,
    // 功能圖標(biāo),可以使用svg的path、可以是一張網(wǎng)絡(luò)圖片,如果是圖片的話,需要加上image://前綴,比如icon: 'image://http://example.com/xxx.png'
    icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0',
    title: 'export',
    url: '#'
};

// 必須注冊feature
require('echarts/lib/component/toolbox/featureManager').register(
   // 功能名字   
   'saveAsExcel',
    SaveAsExcel
);

使用##

如果你要在項目中引入全量的echarts,需要在引入echarts之前 引入SaveAsExcel.js

import './yourPath/SaveAsExcel';
import echarts from 'echarts';
....

如果是部分引入, 則在引入toolbox之前 引入SaveAsExcel.js

//  引入 ECharts 主模塊
var echarts = require('echarts/lib/echarts');
//  引入柱狀圖
require('echarts/lib/chart/bar');
//  引入擴(kuò)展的工具按鈕
require('./yourPath/SaveAsExcel');
// 引入toolbox
require('echarts/lib/component/toolbox');

在業(yè)務(wù)代碼里面使用

const opt = {
    ...
    toolbox: {
        feature: {
            // 自定義的下載按鈕
            saveAsExcel: {
                url: `xxxx.jsp`,
                title: '下載'
            }
        }
    }
};

效果

image.png

結(jié)語

通過這樣的擴(kuò)展方式,既實(shí)現(xiàn)了功能,也不會修改原有代碼的功能,個人認(rèn)為還是一種比較好的方式吧,如果需要更多更復(fù)雜的功能 ,其實(shí)都可以通過類似的方式來實(shí)現(xiàn) ,當(dāng)然這就需要對echarts源碼吃透一點(diǎn)了。
由于筆者能力有限,如果文章中有哪里不對的地方,還請拍磚指正。希望本文對你有所幫助~~??。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,147評論 4 61
  • 一般的情況,家人在我不外出。增加墊上練習(xí),還是拉伸為主,太硬了,一定拉軟一點(diǎn)。 下午羽球三小時,看見的都說我胖了,...
    周湘泉閱讀 145評論 0 3
  • 藝考結(jié)束后,我們終于也停止了廣州的漂泊生活回到實(shí)驗(yàn)高中,我,黃一陽,老賴,林小芳。 故事便是從藝考前開始的,那時候...
    哆咽癲閱讀 1,089評論 0 1
  • 時光老了 人心淡了 計較少了 快樂多了 壓力少了 輕松多了 抱怨少了 舒心多了 自卑少了 自信多了 攀比少了 自在...
    隨風(fēng)飄搖閱讀 289評論 0 1

友情鏈接更多精彩內(nèi)容