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>
相关推荐
清岚_lxn2 小时前
原生SSE实现AI智能问答+Vue3前端打字机流效果
前端·javascript·人工智能·vue·ai问答
ZoeLandia3 小时前
Element UI 设置 el-table-column 宽度 width 为百分比无效
前端·ui·element-ui
橘子味的冰淇淋~3 小时前
解决 vite.config.ts 引入scss 预处理报错
前端·vue·scss
小小小小宇5 小时前
V8 引擎垃圾回收机制详解
前端
lauo5 小时前
智体知识库:ai-docs对分布式智体编程语言Poplang和javascript的语法的比较(知识库问答)
开发语言·前端·javascript·分布式·机器人·开源
拉不动的猪5 小时前
设计模式之------单例模式
前端·javascript·面试
一袋米扛几楼986 小时前
【React框架】什么是 Vite?如何使用vite自动生成react的目录?
前端·react.js·前端框架
Alt.96 小时前
SpringMVC基础二(RestFul、接收数据、视图跳转)
java·开发语言·前端·mvc
lorogy6 小时前
【VSCode配置】运行springboot项目和vue项目
vue.js·spring boot·vscode
进取星辰6 小时前
1、从零搭建魔法工坊:React 19 新手村生存指南
前端·react.js·前端框架