很久没有水文了,今天来水一篇,方便自己往后更好的划水!
第一步:安装echarts
npm i echarts
第二步:在main.js引入echarts
import * as echarts from 'echarts'
app.config.globalProperties.$echarts = echarts
或者可以在组件页面引入直接使用
第三步:封装组件:barChart.vue
<template> <div ref="EcharRef" :id="`EcharRef-${id}`" style="width: 100%; height: 100%" ></div> </template> <script> import * as echarts from 'echarts' import {fontSize} from '../fontSize.js' import {onMounted} from 'vue' export default { props: { chartData: Array, series: Array, id: String, color: Array, top: String }, setup(props, context) { onMounted(() => { const color = props.color const data = props.series let newStyle = [] //生成渐变数组 if (data.length > 0) { data.forEach((e, i) => { let style = [ {offset: 0, color: color[i][0]}, // 0%柱图渐变色 {offset: 1, color: color[i][1]} // 100%柱图渐变色 ] newStyle.push(style) }) } const series = [] data.forEach((e, i) => { e['type'] = 'bar' let itemStyle = { color: new echarts.graphic.LinearGradient(0, 0, 1, 0, newStyle[i]) } series.push({...e, ...itemStyle}) }) //需要获取到element,所以是onMounted的Hook let myChart = echarts.init( document.getElementById(`EcharRef-${props.id}`) ) // 绘制图表 const option = { tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' }, backgroundColor: 'rgba(0,12,13,.5)', // 修改背景颜色 borderColor: '#70F1FF', // 修改边框颜色 textStyle: { color: '#fff' } }, legend: { data: [] }, color: ['#6CEAF9', '#2240E8', '#FBBACB', '#4695D1'], grid: { top: props.top || '12%', left: '1%', right: '6%', bottom: '5%', containLabel: true }, xAxis: { type: 'value', boundaryGap: [0, 0.01], splitLine: { show: false }, axisLabel: { show: true, color: '#ffffff', fontSize: fontSize(8) } }, yAxis: { type: 'category', data: props.chartData || [], splitLine: { show: false }, axisLabel: { show: true, color: '#ffffff', fontSize: fontSize(10) }, axisTick: { show: false } }, series: series } myChart.setOption(option) myChart.on('click', function (params) { context.emit('parentMethod', params) }) window.onresize = function () { //自适应大小 myChart.resize() } }) } } </script> <style> </style>
复制
font-size.js 主要是为了根据屏幕设置字体大小
export function fontSize(res) { let clientWidth = document.documentElement.clientWidth if (!clientWidth) return let fontSize = (clientWidth / 1280) return res * fontSize } export const defaultColor = ['#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a'] export const group = (array = [], subGroupLength = 0) => { let index = 0; const newArray = []; while (index < array.length) { newArray.push(array.slice(index, index += subGroupLength)); } return newArray; }
复制
第四步:如何使用:application.vue
<template> <div class="application"> <mytitle :title="'应用排行'"></mytitle> <div class="charts-box"> <bar-chart :chartData="chartData" :series="series" :color="color" :id="'application'" @parentMethod="parentMethod" ></bar-chart> </div> </div> </template> <script setup> import barChart from '@/components/echarts/barChart.vue' import mytitle from './title.vue' const chartData = ['Brazil', 'Indonesia', 'USA', 'India', 'China'] const color = [ ['#0095FF', '#008FF9'], ['#65D8DF', '#2BDABB'] ] const series = [ { name: '2011', data: [120, 248, 204, 490, 174] }, { name: '2012', data: [325, 438, 100, 594, 131] } ] const parentMethod = (data) => { console.log('data', data) } </script> <style lang="less" scoped> .application { height: 100%; width: 100%; .charts-box { height: calc(100% - 35px); } } </style>
复制
最后看看效果图