在vue2組件中使用echarts

這是一個完整的基于vue2組件的echarts案例:
第一步安裝:
npm install echarts --save

第二步:新建TestChart.vue文件,并將以下代碼復(fù)制到新建的文件中

<template>
  <div :class="className" :style="{height:height,width:width}" />
</template>

<script>
import * as echarts from 'echarts'

require('echarts/theme/macarons') // echarts theme

export default {
  // mixins: [resize],
  props: {
    className: {
      type: String,
      default: 'chart'
    },
    width: {
      type: String,
      default: '100%'
    },
    height: {
      type: String,
      default: '350px'
    },
    autoResize: {
      type: Boolean,
      default: true
    },
    chartData: {
      type: String,
      required: true
    }
  },
  data() {
    return {
      chart: null
    }
  },
  watch: {
    chartData: {
      deep: true,
      handler(val) {
        this.setOptions(val)
      }
    }
  },
  mounted() {
    //   在組建再次渲染時盏浙,調(diào)用 this.initChart()初始化echarts圖表
    this.$nextTick(() => {
      this.initChart()
    })
  },
  beforeDestroy() {
    if (!this.chart) {
      return
    }
    this.chart.dispose()//在組件銷毀的時候废膘,調(diào)用chart.dispose()銷毀圖表實例
    this.chart = null
  },
  methods: {
    initChart() {
      this.chart = echarts.init(this.$el)//調(diào)用echarts.init()方法初始化圖表
      this.setOptions(this.chartData)
      /*
      設(shè)置圖表實例的配置項以及數(shù)據(jù)慕蔚,萬能接口,所有參數(shù)和數(shù)據(jù)的修改都可以通過 setOption 完成灌闺,
      ECharts 會合并新的參數(shù)和數(shù)據(jù)坏瞄,然后刷新圖表。
      如果開啟動畫的話鸠匀,ECharts 找到兩組數(shù)據(jù)之間的差異然后通過合適的動畫去表現(xiàn)數(shù)據(jù)的變化。
      */
    },

    setOptions({ totalData, normalData, manMachineSeparationData, notMyselfData, titleLine } = {}) {
    var dataArr = 60;//現(xiàn)實的百分比數(shù)據(jù)
    var data=0;
    this.chart.setOption({
    backgroundColor: "#FFFFFF",//背景色宅此,默認(rèn)無背景爬范。
    title: {//標(biāo)題組件,包含主標(biāo)題和副標(biāo)題侣诵。
        show: true,
        text: '任務(wù)進(jìn)度',//主標(biāo)題
        x: '50%',//直角坐標(biāo)系 grid 中的 x 軸狱窘,
        y: '57%',//直角坐標(biāo)系 grid 中的 y 軸
        z: 8,//直角坐標(biāo)系 grid 中的 z軸
        textAlign: 'center',//文字的對齊方式
        textStyle: {//文字的樣式
            color: '#f1f7fe',
            fontSize: 20,
            fontWeight: 'normal'
        },

    },
    series: [//控制圖表是那種樣式,比如柱狀圖或者餅圖
    // 最小的時鐘的樣式
        {
            name: "內(nèi)部(環(huán)形)進(jìn)度條",
            type: "gauge",//儀表盤
            // center: ['20%', '50%'],
            radius: '60%',
            splitNumber: 10,//分裂數(shù)
            axisLine: {//周線的相關(guān)設(shè)置
                lineStyle: {
                    color: [
                        [dataArr / 100, '#458EFD'],//dataArr / 100處的顏色
                        [1, "#FFFFFF"]//100% 處的顏色
                    ],
                    width: 14//線的寬度
                }
            },
            axisLabel: {
                show: false,//是否顯示刻度標(biāo)簽蘸炸。
            },
            axisTick: {
                show: false,//是否顯示坐標(biāo)軸刻度尖奔。

            },
            splitLine: {
                show: false,//是否顯示分隔線穷当。默認(rèn)數(shù)值軸顯示馁菜,類目軸不顯示铃岔。(在該案例中表示是否顯示時鐘的刻度線)
            },
            pointer: {
                show: false,//是否顯示指針。
            },
        },
        {
            name: '外部刻度',
            type: 'gauge',
            //  center: ['20%', '50%'],
            radius: '70%',
            min: 0, //最小刻度
            max: 100, //最大刻度
            splitNumber: 10, //刻度數(shù)量
            startAngle: 225,
            endAngle: -45,
            axisLine: {
                show: true,
                // 儀表盤刻度線
                lineStyle: {
                    width: 2,
                    color: [
                        [1, '#FFFFFF']
                    ]
                }
            },
            //儀表盤文字
            axisLabel: {
                show: true,
                color: '#868FDF',
                distance: 25,
                formatter: function(v) {//用來格式化圖例文本智嚷,支持字符串模板和回調(diào)函數(shù)兩種形式纺且。
                    switch (v + '') {
                        case '0':
                            return '0';
                        case '10':
                            return '10';
                        case '20':
                            return '20';
                        case '30':
                            return '30';
                        case '40':
                            return '40';
                        case '50':
                            return '50';
                        case '60':
                            return '60';
                        case '70':
                            return '70';
                        case '80':
                            return '80';
                        case '90':
                            return '90';
                        case '100':
                            return '100';
                    }
                }
            }, //刻度標(biāo)簽载碌。
            axisTick: {
                show: true,
                splitNumber: 7,
                lineStyle: {
                    color: '#3082FE', //用顏色漸變函數(shù)不起作用
                    width: 2,
                },
                length: -8
            }, //刻度樣式
            splitLine: {
                show: true,
                length: -20,
                lineStyle: {
                    color: '#458EFD', //用顏色漸變函數(shù)不起作用
                }
            }, //分隔線樣式
            detail: {
                show: false
            },
            pointer: {
                show: false
            }
        },
        /*內(nèi)部*/
        {
            type: 'pie',
            radius: ['0', '40%'],
            center: ['50%', '50%'],
            z: 8,
            hoverAnimation: false,
            data: [{
                name: '檢查進(jìn)度',
                value: dataArr,
                itemStyle: {
                    normal: {
                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                            offset: 0,
                            color: '#3398ff'
                        }, {
                            offset: 1,
                            color: '#7db0fd'
                        }])
                    }

                },
                label: {
                    normal: {
                        formatter: function(params) {
                            return params.value + '%';
                        },
                        color: '#FFFFFF',
                        fontSize: 54,
                        fontWeight: "bold",
                        position: 'center',
                        show: true
                    }
                },
                labelLine: {
                    show: false
                }
            }],
        },
        /*外一層*/
        {
            type: "pie",
            radius: "45%",
            startAngle: 220,
            endAngle: -40,
            hoverAnimation: false,
            center: ["50%", "50%"],
            avoidLabelOverlap: false,
            label: {
                show: false
            },
            labelLine: {
                show: false
            },
            data: [{
                value: 1,
                itemStyle: {
                    normal: {
                        color: '#8DC4FD'
                    }
                }
            }],
        },
        //外二層圈
        {
            type: "pie",
            radius: "50%",
            center: ["50%", "50%"],
            avoidLabelOverlap: false,
            z: 0,
            hoverAnimation: false,
            label: {
                show: false
            },
            labelLine: {
                show: false
            },
            data: [{
                "value": 1,
                itemStyle: {
                    normal: {
                        color: '#e3edf8'
                    }
                }
            }]
        }
    ]
}, true)
    }
  }
}
</script>

第三步使用:
在別的文件中引入新建的文件朗伶,并在conmponents中進(jìn)行注冊,然后在template中使用

//第一步引入
import TestChart from './charts/TestChart.vue'
//第二步進(jìn)行注冊
 components: {
    TestChart
  }
//第三步在template中使用并傳入需要的數(shù)據(jù)
<test-chart :chartData='chartData' width='300px' height='300px'></test-chart>

至此一個儀表盤就被我們成功的畫出來了腕让,效果圖如下:

儀表盤.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纯丸,一起剝皮案震驚了整個濱河市静袖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坠陈,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仇矾,死亡現(xiàn)場離奇詭異贮匕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)刻盐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馒疹,“玉大人,你說我怎么就攤上這事颖变×尕ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵肛走,是天一觀的道長。 經(jīng)常有香客問我朽色,道長组题,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任梢褐,我火速辦了婚禮赵讯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘边翼。我一直安慰自己,他們只是感情好组底,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著江滨,像睡著了一般厌均。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音镊屎,去河邊找鬼。 笑死缝驳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的用狱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼摇展,長吁一口氣:“原來是場噩夢啊……” “哼溺忧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鲁森,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歌溉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痛垛,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年冠蒋,在試婚紗的時候發(fā)現(xiàn)自己被綠了乾胶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡斩郎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缩宜,到底是詐尸還是另有隱情,我是刑警寧澤锻煌,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站匣沼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏释涛。R本人自食惡果不足惜倦沧,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望展融。 院中可真熱鬧,春花似錦愈污、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涧尿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間姑廉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工萌踱, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人并鸵。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓扔涧,卻偏偏與公主長得像届谈,于是被迫代替她去往敵國和親弯汰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容