nuxt使用echarts

news2025/2/25 23:12:19

直接在页面写

在这里插入图片描述

bug1:安装包报错,就更换版本
bug2:图表出不来:需要定义宽高
bug3:需要resize大小

安装

npm install echarts@4.9.0

plugins文件夹下新建echarts.js

import Vue from 'vue'
import echarts from 'echarts' // 引入echarts
Vue.prototype.$echarts = echarts // 引入组件(将echarts注册为全局)

nuxt.config.js中配置

 plugins: [
    '@/plugins/element-ui',
    { src: '@/plugins/utils', ssr: false },// axios.js文件关闭服务端渲染
    { src: '@/plugins/axios', ssr: false }, // axios.js文件关闭服务端渲染
    { src: "~/plugins/swiper.js", ssr: false },
    { src: '~/plugins/store-cache', ssr: false },
    { src: '~/plugins/flexiable.js', ssr: false },
    { src: '@/plugins/bus', ssr: false },
    { src: '~plugins/echarts', ssr: false },
  ],

页面

<div class="mtb-20" style="height: 3.6rem;">
    <div id="myChart" style="width: 12.5rem;height: 3.6rem;"></div>
</div>
export default {
  data() {
    return {
      barChart: null,    
    };
  },
  mounted() {
    this.init()
    // 监听屏幕大小变化
    window.addEventListener("resize", this.screenResize);
  },
  beforeDestroy() {
    window.removeEventListener("resize", this.screenResize);
  },
  methods: {
    init() {
      // 找到容器
      this.barChart = this.$echarts.init(document.getElementById('myChart'))
      // 开始渲染
      this.barChart.setOption({
        grid: {
          top: "10%",
          right: "5%",
          left: "5%",
          bottom: "20%",
        },
        xAxis: [
          {
            type: "category",
            data: [],
            axisPointer: {
              type: "line",
            },
            axisLabel: {
              margin: 20,
              color: "#59588D",
              textStyle: {
                fontSize: 14,
              },
            },
          },
        ],
        yAxis: [
          {
            min: 0,
            axisLabel: {
              formatter: "{value}",
              color: "#59588D",
            },
            splitLine: {
              lineStyle: {
                color: "#f5f6f7",
              },
            },
          },
        ],
        series: [
          {
            type: "bar",
            data: [],
            barWidth: "20px",
            itemStyle: {
              normal: {
                color: '#00cdba',
                barBorderRadius: [30, 30, 0, 0],
              },
            },
            label: {
              normal: {
                show: true,
                borderRadius: 200,
                position: ["0", "-20"],
                formatter: [" {a|{c}}"].join(""),
                rich: {
                  a: {
                    color: "#333",
                    align: "center",
                  },
                },
              },
            },
          },
        ],
      })
      this.getData()
    },
    // 掉接口
    getData() {
      // 排序 
      // 当前X、Y轴数据
      // let barDataX = list.map((item) => item.name);
      // let barDataY = list.map((item) => item.value);

      let dataOption = {
        xAxis: {
          data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子'],
        },
        series: [
          {
            data: [5, 20, 36, 10, 10, 20], // 数据
          },
        ],
      };
      // 生成图表
      this.barChart.setOption(dataOption);
    },
    // 监听屏幕变化
    screenResize() {
      this.$nextTick(() => {
        // 更新图表
        this.barChart.resize();
      });
    },
  },
};
</script>

封装组件

##components/BarChart.vue 组件

<template>
  <div id="index">
    <div id="chart" :style="`width:${width};height: ${height};`"></div>
  </div>
</template>
<script>

export default {
  data() {
    return {
      chart: null,
    };
  },
  props: ["list", "width", "height"],
  watch: {
    list: {
      handler(val) {
        // 深度监听没有旧值
        this.date = val.map((item) => {
          return item.date;
        });
        this.number = val.map((item) => {
          return item.number;
        });

        let option = {
          xAxis: [
            {
              data: this.date,
            },
          ],
          series: [
            {
              data: this.number, // 订单量
            },
          ],
        };
        this.chart.setOption(option);
      },
      // 这里是关键,代表递归监听的变化
      deep: true,
    },
  },
  mounted() {
    this.init()
    // 监听屏幕大小变化
    window.addEventListener("resize", this.screenResize);
  },
  beforeDestroy() {
    window.removeEventListener("resize", this.screenResize);
  },
  methods: {
    init() {
      // 找到容器
      this.chart = this.$echarts.init(document.getElementById('chart'))
      // 开始渲染
      this.chart.setOption({
        grid: {
          top: "10%",
          right: "5%",
          left: "5%",
          bottom: "20%",
        },
        xAxis: [
          {
            type: "category",
            data: [],
            axisPointer: {
              type: "line",
            },
            axisLabel: {
              margin: 20,
              color: "#59588D",
              textStyle: {
                fontSize: 13,
              },
            },
          },
        ],
        yAxis: [
          {
            min: 0,
            axisLabel: {
              formatter: "{value}",
              color: "#59588D",
            },
            splitLine: {
              lineStyle: {
                color: "#f5f6f7",
              },
            },
          },
        ],
        series: [
          {
            type: "bar",
            data: [],
            barWidth: "20px",
            itemStyle: {
              normal: {
                color: '#00cdba',
                barBorderRadius: [30, 30, 0, 0],
              },
            },
            label: {
              normal: {
                show: true,
                borderRadius: 200,
                position: ["0", "-20"],
                formatter: [" {a|{c}}"].join(""),
                rich: {
                  a: {
                    color: "#333",
                    align: "center",
                  },
                },
              },
            },
          },
        ],
      })
    },
    // 监听屏幕变化
    screenResize() {
      this.$nextTick(() => {
        // 更新图表
        this.chart.resize();
      });
    },
  },
};
</script>
<style scoped></style>

使用

 <div class="mtb-20" style="height: 3.6rem;">
    <BarChart :list="list" width="12.5rem" height="3.6rem"></BarChart>
 </div>
list: [] //柱状图
//模拟接口
 mounted() {
    setTimeout(() => {
      this.list = [{
        date: 1.1,
        number: 10
      }, {
        date: 2.1,
        number: 12
      }, {
        date: 3.1,
        number: 21
      }, {
        date: 4.1,
        number: 11
      }, {
        date: 5.1,
        number: 31
      },]
    }, 1000)
  },

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1027522.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows 下 MySQL 8.1 图形化界面安装、配置详解

首先我们下载安装包 官方下载链接&#xff1a; MySQL :: Begin Your Download 网盘链接: https://pan.baidu.com/s/1FOew6-93XpknB-bYDhDYPw 提取码: brys 外网下载慢的同学可以使用上述网盘链接 下载完成后我们双击安装包即可进入安装界面 点击next 勾选同意协议&#…

【AIGC】图片生成的原理与应用

前言 近两年 AI 发展非常迅速&#xff0c;其中的 AI 绘画也越来越火爆&#xff0c;AI 绘画在很多应用领域有巨大的潜力&#xff0c;AI 甚至能模仿各种著名艺术家的风格进行绘画。 目前比较有名商业化的 AI 绘画软件有 Midjourney、DALLE2、以及百度出品的文心一格&#xff1a;…

解锁前端Vue3宝藏级资料 第五章 Vue 组件应用 4 ( provide 和 inject )

5.5 provide 和 inject 前面的知识告诉我们vue中组件之间传递值需要使用props来完成&#xff0c;但是props也有一定局限性。这个时候在vue3中还有另外的解决方法。那就是使用 provide 和 inject 允许父组件将数据传递给所有后代组件&#xff0c;而不管组件层次结构有多深。你要…

【linux基础(八)】计算机体系结构--冯诺依曼系统操作系统的再理解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 计算机体系结构 1. 前言2. 冯…

eBPF深度探索: 高效DNS监控实现

eBPF可以灵活扩展Linux内核机制&#xff0c;本文通过实现一个DNS监控工具为例&#xff0c;介绍了怎样开发实际的eBPF应用。原文: A Deep Dive into eBPF: Writing an Efficient DNS Monitoring eBPF[1]是内核内置的虚拟机&#xff0c;在Linux内核内部提供了高层库、指令集以及执…

Javascript小案例--树形菜单(菜单数据为对象)

理论上菜单层级可以无限多&#xff0c;因为是递归渲染。 gif效果图&#xff1a; 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initi…

RHCE---Linux的计划任务

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 如果想要让自己设计的备份程序可以自动地在系统下面运行&#xff0c;而不需要手动来启动它&#xff0c;这是该如何处理&#xff1f;这些任务可以分为【单一】任务和【循环】任务&#xff0…

集简云票税通,高效、管理销项发票,满足多样化开票需求

随着数字化时代的到来&#xff0c;传统的纸质发票已经逐渐被电子发票所替代。然而&#xff0c;对于许多企业来说&#xff0c;管理和开具大量的销项发票仍然是一项繁琐的任务&#xff1a; 票税处理成本高&#xff0c;手工开票效率低。部分企业手工开票量大&#xff0c;耗费大量财…

问题:conda删除虚拟环境,报错no package names supplied

用conda 用 conda remove -n ScratchDet_20200114 删除虚拟 环境ScratchDet_20200114时报错 conda remove -n ScratchDet_20200114CondaValueError: no package names supplied,try "conda remove -h" for more details 解决方法&#xff0c;用下面的命令 conda env…

C++——vector(3)

作者&#xff1a;几冬雪来 时间&#xff1a;2023年9月20日 内容&#xff1a;C部分——vector内容讲解 目录 前言&#xff1a; erase&#xff1a; erase和insert总结&#xff1a; resize&#xff1a; 深拷贝&#xff1a; 赋值&#xff1a; 结尾&#xff1a; 前言&…

CentOS7在磁盘 Disk /dev/vdb 格式化为xfs, 创建逻辑卷saas,并挂载到/home/saas

CentOS7在磁盘 Disk /dev/vdb 格式化为xfs&#xff0c; 创建逻辑卷saas&#xff0c;并挂载到/home/saas CentOS7在磁盘 Disk /dev/vdb 格式化为xfs&#xff0c; 创建逻辑卷saas&#xff0c;并挂载到/home/saasCentOS7在磁盘 Disk /dev/vdb 格式化为xfs&#xff0c;并挂载到/ho…

关于安卓SVGA浅尝(一)svgaplayer库的使用

关于安卓SVGA浅尝&#xff08;一&#xff09;使用 相关链接 SVGA官网 SVGA-github说明文档 背景 项目开发&#xff0c;都会和动画打交道&#xff0c;动画的方案选取&#xff0c;就有很多选择。如Json动画&#xff0c;svga动画&#xff0c;gif等等。各有各的优势。目前项目中…

什么是浏览器的同源策略(same-origin policy)?它对AJAX有什么影响?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浏览器的同源策略&#xff08;Same-Origin Policy&#xff09;⭐ 同源策略对AJAX的影响⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;…

Mybatis 映射器中使用@InsertProvider,@UpdateProvider,@DeleteProvider,@SelectProvider

上一篇我们介绍了在Mybatis映射器的映射方法中使用Param接收多个参数&#xff1b;本篇我们继续介绍如何在Mybatis的映射器中使用动态SQL。 如果您对Mybatis映射器的映射方法中使用Param接收多个参数不太了解&#xff0c;建议您先进行了解后再阅读本篇&#xff0c;可以参考&…

iphone的safari浏览器实现全屏的pwa模式,并修改顶部状态栏背景颜色

要想修改顶部背景颜色&#xff0c;需要用到这个属性&#xff1a;content就是你要设置的颜色 <!-- 状态栏的背景色 --><meta name"theme-color" content"#f8f8f8" /> 然后再加上下面的设置&#xff1a; <!-- 网站开启对 web app 程序的支持…

DAZ To UMA⭐一.DAZ使用简介 / 设置DAZ导出的内容 / 获取模型纹理贴图

文章目录 🟥 DAZ快捷键🟧 DAZ界面介绍🟩 设置DAZ导出的内容1️⃣ 找到要导出的参数名称2️⃣ 打开导出面板3️⃣ 设置导出规则举例 : 导出身体Assets🟦 获取模型纹理贴图🟥 DAZ快捷键 移动物体:ctrl+alt+鼠标左键 旋转物体:ctrl+alt+鼠标右键 导入模型:双击左侧模型…

修改接口,字段的内容允许清空,避免歧义,参数校验:@NotNull

1. 问题描述 修改接口&#xff0c;字段的内容允许清空&#xff0c;是否应该做参数校验&#xff1f;如何做参数校验&#xff1f; 2. 说明 2.1. 需要对字段进行校验。 因为不校验&#xff0c;字段可能不传&#xff0c;或者字段的值为null&#xff1b;这样无法判断出&#xff…

Nginx是如何支持百万并发的?

通过源码分析Nginx的整体架构,以及进程模型。Nginx是一个免费的,开源的,高性能的HTTP服务器和反向代理。以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。Nginx是一个Web服务器,也可以用作负载均衡器和HTTP缓存。 很多高知名度的网站都使用Nginx,比如:N…

【线性代数】为什么 AA* = |A|E

A A ∗ 矩阵相乘&#xff0c;刚好是行列式展开的定义 AA*矩阵相乘&#xff0c;刚好是行列式展开的定义 AA∗矩阵相乘&#xff0c;刚好是行列式展开的定义 矩阵提取一个因子 ∣ A ∣ &#xff0c;所有元素需要除 ∣ A ∣ 矩阵提取一个因子 |A|&#xff0c;所有元素需要除 |A| 矩…

生信分析Python实战练习 9 | 视频27

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在&#xff1a;https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…