Vue3.0引入Echarts并使用

vue3.0使用echarts 前言 本文主要是讲述vue3.0中应用echarts步骤。主要涉及到vue3.0vue对象的很多新API或对象的使用。而且网上给出的方法比较繁乱,要么是没有做成公共引用方法,仅在要使用的组件中单独引入,要么是按示例代码实现不生效等。现根据停车业务前端代码的实现,做了个笔记,供大家参考和使用。 1.安装echarts npm install echarts --save 2.main.js引入进行挂载配置 import * as echarts from 'echarts' const app 阅读详情

本文主要总结Vue3.0 中全局引用echarts及封装的公共方法。封装的公共方法参考这里(感恩.gif)

一、Vue3.0全局引入Echarts

1. 安装echarts

npm install echarts --save

2. main.js引入echarts

// 引入 echarts
import * as echarts from "echarts";
const app = createApp(App);
// 全局挂载 echarts
app.config.globalProperties.$echarts = echarts;

3. vue文件里使用

<template>
  <div
    ref="lineChart"
    id="lineChart"
    :style="{ width: '800px', height: '400px' }"
  ></div>
</template>

<script>
import { getCurrentInstance, onMounted } from "vue";
export default {
  setup() {
    // 通过 internalInstance.appContext.config.globalProperties 获取全局属性或方法
    let internalInstance = getCurrentInstance();
    let echarts = internalInstance.appContext.config.globalProperties.$echarts;

    onMounted(() => {
      const dom = document.getElementById("lineChart");
      const myChart = echarts.init(dom); // 初始化echarts实例
      const option = {···}; // 图表配置参数
      myChart.setOption(option);
      // 设置实例参数
      window.onresize = () => {
        myChart.resize();
      };
    });
    return {};
  },
};
</script>

二、Vue3.0 封装echarts公共方法

使用Echarts做数据大屏的时候,需要初始化多个图表,每个图表的都要进行初始化对应的DOM元素绑定var myChart = echarts.init(document.getElementById(‘eleDom’));封装一个公共方法比较方便。

1. 在utility目录下建立initEcharts.js文件

// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
import * as echarts from "echarts/core";
// 引入各种图表,图表后缀都为 Chart
import { BarChart, PieChart, LineChart } from "echarts/charts";
// 引入提示框,标题,直角坐标系等组件,组件后缀都为 Component
import {
  TitleComponent,
  TooltipComponent,
  GridComponent,
  LegendComponent,
  // GeoCoComponent
} from "echarts/components";
// 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
import { CanvasRenderer } from "echarts/renderers";

// DIV 宽高变化监听
import { EleResize } from "@/utility/eleResize";

// 注册必须的组件
echarts.use([
  TitleComponent,
  TooltipComponent,
  GridComponent,
  LegendComponent,
  BarChart,
  PieChart,
  LineChart,
  CanvasRenderer,
]);

/** 封装 echart初始化方法,需要传入 绘制图表的dom元素和绘制图表缩需要的相关配置项 *
 *   同时还添加了图表自动适应dom的宽高变化的功能,需要引入EleResize.js
 */
function drawChart(dom, option) {
  const $Chart = echarts.init(document.getElementById(dom));
  const resizeDiv = document.getElementById(dom);
  $Chart.setOption(option);
  const listener = function () {
    console.log("divRsize");
    $Chart.resize();
  };
  EleResize.on(resizeDiv, listener);
  return $Chart;
}

export { drawChart };

2. main.js

// 引入封装好的初始化方法
import { drawChart } from "@/utility/initEcharts";
// 在vue的原型上绑上 刚刚封装的方法,将来可以在组件中通过this.$drawChart()来进行调用
const app = createApp(App);
app.config.globalProperties.$drawChart = drawChart;

3. 在vue文件中使用

只需要配置option即可

<template>
   <div
     ref="lineChart"
     id="lineChart"
     :style="{ width: '800px', height: '400px' }"
   ></div>
</template>

<script>
const domEle = "lineChart";
// 图表配置项
const option = {···};
export default {
  mounted() {
    this.darwChart();
  },
  data() {
    return {
      lineChart: null,
    };
  },
  methods: {
    darwChart() {
	  this.lineChart = this.$drawChart(domEle, option);
    },
  },
};
</script>

4. JS监听div的resize事件EleResize.js

EleResize.js

var EleResize = {
  _handleResize: function(e) {
    var ele = e.target || e.srcElement
    var trigger = ele.__resizeTrigger__
    if (trigger) {
      var handlers = trigger.__z_resizeListeners
      if (handlers) {
        var size = handlers.length
        for (var i = 0; i < size; i++) {
          var h = handlers[i]
          var handler = h.handler
          var context = h.context
          handler.apply(context, [e])
        }
      }
    }
  },
  _removeHandler: function(ele, handler, context) {
    var handlers = ele.__z_resizeListeners
    if (handlers) {
      var size = handlers.length
      for (var i = 0; i < size; i++) {
        var h = handlers[i]
        if (h.handler === handler && h.context === context) {
          handlers.splice(i, 1)
          return
        }
      }
    }
  },
  _createResizeTrigger: function(ele) {
    var obj = document.createElement('object')
    obj.setAttribute(
      'style',
      'display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden;opacity: 0; pointer-events: none; z-index: -1;'
    )
    obj.onload = EleResize._handleObjectLoad
    obj.type = 'text/html'
    ele.appendChild(obj)
    obj.data = 'about:blank'
    return obj
  },
  _handleObjectLoad: function(evt) {
    this.contentDocument.defaultView.__resizeTrigger__ = this.__resizeElement__
    this.contentDocument.defaultView.addEventListener(
      'resize',
      EleResize._handleResize
    )
  }
}
if (document.attachEvent) {
  // ie9-10
  EleResize.on = function(ele, handler, context) {
    var handlers = ele.__z_resizeListeners
    if (!handlers) {
      handlers = []
      ele.__z_resizeListeners = handlers
      ele.__resizeTrigger__ = ele
      ele.attachEvent('onresize', EleResize._handleResize)
    }
    handlers.push({
      handler: handler,
      context: context
    })
  }
  EleResize.off = function(ele, handler, context) {
    var handlers = ele.__z_resizeListeners
    if (handlers) {
      EleResize._removeHandler(ele, handler, context)
      if (handlers.length === 0) {
        ele.detachEvent('onresize', EleResize._handleResize)
        delete ele.__z_resizeListeners
      }
    }
  }
} else {
  EleResize.on = function(ele, handler, context) {
    var handlers = ele.__z_resizeListeners
    if (!handlers) {
      handlers = []
      ele.__z_resizeListeners = handlers

      if (getComputedStyle(ele, null).position === 'static') {
        ele.style.position = 'relative'
      }
      var obj = EleResize._createResizeTrigger(ele)
      ele.__resizeTrigger__ = obj
      obj.__resizeElement__ = ele
    }
    handlers.push({
      handler: handler,
      context: context
    })
  }
  EleResize.off = function(ele, handler, context) {
    var handlers = ele.__z_resizeListeners
    if (handlers) {
      EleResize._removeHandler(ele, handler, context)
      if (handlers.length === 0) {
        var trigger = ele.__resizeTrigger__
        if (trigger) {
          trigger.contentDocument.defaultView.removeEventListener(
            'resize',
            EleResize._handleResize
          )
          ele.removeChild(trigger)
          delete ele.__resizeTrigger__
        }
        delete ele.__z_resizeListeners
      }
    }
  }
}
export { EleResize }

如何在vue3.0使用echarts图表+demo vue使用echarts 阅读详情

相关推荐

实战:在vue3.0引入echarts的正确姿势

1.下载 echarts npm i -s echarts 2.在main.js引入 import { createApp } from 'vue' import App from './App.vue' // 引入 echarts import * as echarts from 'echarts' const app = createApp(App) // 全局挂载 echarts app.config.globalProperties.$echarts = echarts app.mo

qingzhen的博客 1万+

Vue3中按需引入ECharts(一看就会)

使用背景:比如做一个工程化项目,且只使用到柱状图和折线图,如果把所有的echarts组件都引入到项目中的话,会影响用户打开页面的速度和项目的性能。所以对于做一个高逼格的程序工程师,我们需要按需引入

qq_17355709的博客 1万+

vue3.0引入echarts(ref获取dom)

前言: vue3.0中的方法和echarts升级到5以后的方法都有改变。 vue3.0官方入口echart5官方入口 目录: 实现效果: 方法一:使用id来绑定页面dom,引入echart 操作步骤: 1、引入echart 2、页面上定义dom 3、具体方法 4、样式 方法二:使用ref来绑定页面dom,引入echart 操作步骤: 1、引入echart 2、页面上定义dom 3、具体方法 4、样式 实现效果: 方法一:使用id来绑定页面dom,...

浩星 7507

Vue3 手把手按需引入 Echarts

Vue3按需引入Echarts步骤及踩坑笔记

赵花花的博客 1万+

Vue3+Vite引入Echarts5.0图表库

1 概述 环境Vue3+Vite,需要引入ECharts库。 2 尝试 目前ECharts已更新到5.0版本,在Vue引入不难,npm/cnpm安装后在需要的组件中引入: import echarts from 'echarts' 即可。 但, 问题是这是以前的版本可行的,更新到5.0版本后需要使用其他方法。 另一方面官方文档是使用require引入: 但是,这是在Webpack的情况下,在Vite中不能直接使用require,官方issue有讨论,明说了require不支持,这是一个Node的特

氷泠 5902

vue3+vite 项目中使用 Echarts 5.0 按需引入教程

vue3 + vite 项目中使用 echarts 5.0 按需引入的教程,教室项目打包后的提交,提高项目的访问速度

少年的范儿的博客 573

vue3引入echarts

main.js文件 import { createApp } from "vue"; import App from "./App.vue"; import "./registerServiceWorker"; import router from "./router"; import store from "./store"; import * as echarts from 'echarts' const app = createApp(App) app.use(store) app.use(ro

believet93的博客 1万+

vue30到1创建echarts案例示范,保姆级教程【图文+代码】

 本篇文章演示如何快速且简单地在vue3中实现echarts图表。 一些图表的样式,图表的参数等设置,需要大家自行进行查询学习。

科技改变世界,技术驱动未来。 2万+

vue3项目如何使用echarts

注意:需要使用import * as echarts from ‘echarts’,不能使用 import echarts from ‘echarts’,否则会报错。的文字内容显示一些没有显示,盲猜没有显示的原因是因为文字太长了,刚好原型里面 X 轴的字需要倾斜,查询文档 xAxis里面有个 axisLabel 可以配置实现。series里itemStyle的这个属性,可以设置样式,通过color设置渐变色,barBorderRadius设置圆角。在setup中引入安装echarts

fury的博客 1万+

Echarts+Vue3.0 学习(大数据可视化)

什么是数据可视化数据可视化的展现形式数据可视化作用2.1什么是数据可视化?数据可视化,是关于数据视觉表现形式的科学技术研究2.2 数据可视化的展现形式?数据可视化有众多展现方式,不同的数据类型要选择合适的展现方法。2.3 数据可视化作用数据可视化的意义是帮助人更好的分析数据​可视化增加数据的灵性3.1 特点1.丰富的可视化类型2.多数据格式无需转换3.千万级别的数据进行展示4.移动端优化5.多渲染方案跨平台使用6.深度的交互方案7.动态数据8.绚丽的特效。

xiaoyao_zhy的博客 7339

VUE3引入Echarts两种方法

1、安装Echarts npm install echarts --save 2、全局引入 main.js import { createApp } from 'vue' import App from './App.vue' import router from './router' import store from './store' import * as echarts from 'echarts' const app = createApp(App) app.config.gl

qq_44532387的博客 6049

Vue 3项目中使用 echarts

记得第一次使用 echarts 还是2019年的时候,那时做的一个物联网项目云平台的前端需要一些数据可视化功能,经过一些对比后就使用echarts 。上手非常快,专业性也足够,因此在后来其他的一些项目中就多次用到它。 echarts 是百度基于 JavaScript 实现的一个开源可视化图表库,主要特点就是可视化类型丰富、动画炫酷、使用简单。 这个教程就简单演示如何在 Vue 3 项目中使用 echarts。 一,创建 Vue3 项目安装 echarts npm 创建项目: npm create u

dangfulin的博客 3万+

Vue3使用echarts——全局引入步骤

Vue3使用echarts——全局引入步骤

weixin_50632313的博客 2477

【全栈老魏-前端】Vue3引入echarts

如何在Vue3项目中以typescript语言引入echarts

Allen_Swfit的博客 1604

echarts

&lt;div id="main" style="width: 600px;height:400px;"&gt;&lt;/div&gt; &lt;script src="~/lib/echarts/dist/echarts.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt;

weixin_34283445的博客 561

vue3使用echarts

在SetUp中使用echarts 在setup中可以直接引入文件 import { onMounted } from "vue"; import * as echarts from 'echarts' export default { name: "data_page", setup() { onMounted(() => {//需要获取到element,所以是onMounted的Hook let myChart = echarts.init(document.getEle

web18224617243的博客 5961

vue3.0 使用echartsecharts-gl 实现3D饼图

3js引入echarts。1、安装echarts

qq_39186695的博客 9735
上一篇: npm install 报错up to date in 3m
下一篇: 粘性定位元素position:sticky的使用
金牌战五渣
博客等级 码龄10年 745粉丝 34原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值