vue2使用vue-echarts

1.先安装echarts npm i echarts

2.安装vue-echarts

安装的时候注意下对应的版本

"echarts": "5.5.0", "vue-echarts": "6.7.3",这是我安装的版本

注意事项:

如果安装之后报错:"export 'watchEffect' (imported as 'o') was not found in 'vue-demi'之类的,可能是vue的版本太低了在2.7以下

那么则需要安装依赖npm install @vue/composition-api

再在main.js中引入并注册

import VueCompositionApi from '@vue/composition-api';

Vue.use(VueCompositionApi);

再就是vue-echarts的使用示例

javascript 复制代码
<template>
    <v-chart :option="computedOption" autoresize :style="{ height: chartHeight, width: '100%' }" />
</template>  
  
  <script>
import VChart, { THEME_KEY } from 'vue-echarts'
import { use } from 'echarts/core'
import 'echarts/lib/component/grid'
import { PieChart, BarChart, LineChart } from 'echarts/charts'
import { TitleComponent, TooltipComponent, LegendComponent } from 'echarts/components'
import { CanvasRenderer } from 'echarts/renderers'

// 注册 ECharts 组件
use([TitleComponent, TooltipComponent, LegendComponent, PieChart, BarChart, LineChart, CanvasRenderer])

export default {
  name: '', // 添加组件名称
  components: {
    VChart,
  },
  props: {
    chartHeight: {
      type: String,
      default: '100%',
    },
    // 图表数据
    chartData: {
      type: Array,
      required: false,
      default: () => [],
    },
    seriesData: {
      type: Array,
      required: false,
      default: () => [],
    },
    xData: {
      type: Array,
      default: () => [],
    },
  },
  computed: {
    computedOption() {
      return this.generateOption(this.chartData, this.seriesData)
    },
  },
  methods: {
    generateOption(dataList, seriesData) {
      const legendData = this.seriesData.map((item) => item.name)
      const dataTime = [
        '2023-12',
        '2024-01',
        '2024-02',
        '2024-03',
        '2024-04',
        '2024-05',
        '2024-06',
        '2024-07',
        '2024-08',
        '2024-09',
        '2024-10',
        '2024-11',
        '2024-12',
      ]

      // 生成 series 数据
      const series = seriesData.map((item) => ({
        name: item.name,
        type: 'line',
        tooltip: item.tooltip,
        data: item.data,
        symbol: 'none',
        smooth:true,
        showSymbol: false,
        lineStyle: {
          width: 1.5
        }
      }))

      const option = {
        backgroundColor: '#ffffff', // 设置背景颜色为白色
        grid: {
          top: '10%', // 顶部内边距
          left: '10%', // 左侧内边距
          right: '10%', // 右侧内边距
          bottom: '30%', // 底部内边距
        },
        tooltip: {
          trigger: 'axis',
          // axisPointer: {
          //   type: "cross",
          //   crossStyle: {
          // 	color: "#999",
          //   },
          // },
        },
        legend: {
          data: legendData,
          orient: 'horizontal', //
          bottom: '2%', // 图例放在底部
          left:'10%',
          right:'10%',
          icon: 'rect',
          height:'25%', 
          // type: 'scroll', // 超过宽度可滚动
          // pageIconColor: '#666', // 翻页按钮颜色
          // pageTextStyle: {
          //   color: '#666'
          // },
          itemGap: 15, // 图例项间隔
          lineHeight: 16,   // 行高
          itemWidth: 30, // 图例标记宽度
          itemHeight: 2, // 图例标记高度
          textStyle: {
            fontSize: 12,
            padding: [0, 0, 0, 5] // 调整文字与图例标记间距
          },
          // formatter: function (name) {
          //   // 限制图例文字长度
          //   return name.length > 6 ? name.substring(0, 6) + '...' : name;
          // }
        },
        xAxis: [
          {
            type: 'category',
            data: this.xData,
            axisPointer: {
              type: 'shadow',
            },
            axisTick: {
              show: false,
            },
            lineStyle: {
              type: 'dashed', // 设置为虚线
              color: '#ccc', // 虚线颜色
            },
            splitLine: {
              show: true,
              lineStyle: {
                type: 'dashed', // 设置为虚线
                color: '#ccc', // 虚线颜色
              },
            },
          },
        ],
        yAxis: [
          {
            type: 'value',
            name: '',
            min: 0,
            axisLabel: {
              formatter: '{value} ',
            },
            axisLine: {
              show: true,
            },
            lineStyle: {
              type: 'dashed', // 设置为虚线
              color: '#ccc', // 虚线颜色
              width: 1
            },
            splitLine: {
              show: true,
              lineStyle: {
                type: 'dashed',
                color: '#ccc',
                width: 0.5,
              },
            },
          },
          {
            type: 'value',
            name: '',
            min: 0,
            axisLabel: {
              formatter: '{value} ',
              show: false, // 隐藏右侧的 Y 轴标签
            },
            splitLine: {
              show: true,
              lineStyle: {
                type: 'dashed',
                color: '#ccc',
              },
            },
          },
        ],
        series: series,
      }
      return option
    },
  },
}
</script>  
  
  <style scoped>
.chart-container {
  width: 100%;
}
</style>
相关推荐
智能化咨询6 小时前
【Linux】【实战向】Linux 进程替换避坑指南:从理解 bash 阻塞等待,到亲手实现能执行 ls/cd 的 Shell
前端·chrome
Anson Jiang6 小时前
浏览器标签页管理:使用chrome.tabs API实现新建、切换、抓取内容——Chrome插件开发从入门到精通系列教程06
开发语言·前端·javascript·chrome·ecmascript·chrome devtools·chrome插件
掘金安东尼6 小时前
黑客劫持:周下载量超20+亿的NPM包被攻击
前端·javascript·面试
java水泥工7 小时前
基于Echarts+HTML5可视化数据大屏展示-白茶大数据溯源平台V2
大数据·echarts·html5
剑亦未配妥7 小时前
移动端触摸事件与鼠标事件的触发机制详解
前端·javascript
人工智能训练师13 小时前
Ubuntu22.04如何安装新版本的Node.js和npm
linux·运维·前端·人工智能·ubuntu·npm·node.js
Seveny0713 小时前
pnpm相对于npm,yarn的优势
前端·npm·node.js
yddddddy14 小时前
css的基本知识
前端·css
昔人'14 小时前
css `lh`单位
前端·css
Nan_Shu_61416 小时前
Web前端面试题(2)
前端