实现如下效果:

效果展示:https://code.juejin.cn/pen/7226656439941955644

如果不会请移步到官网的栗子,请点击查看

直接给大家上代码:

  • 整体代码片段

 1 <template>
2 <div ref="echarts" style="width: 100%; height:300px;"></div>
3 </template>
4 <script>
5 /* eslint-disable */
6 import { setPieOption } from "@/util/pieConfig";
7
8 export default {
9 name: 'PieDom',
10 props: ["categoryList"],
11 data() {
12 return {}
13 },
14 mounted() {
15 this.$nextTick(() => {
16 this.loadBars();
17 });
18 },
19 methods: {
20 loadBars() {
21 this.$nextTick(function () {
22 let myChart = this.$echarts.init(this.$refs.echarts) // 绘制图表
23 let text = "聚类各项占比";
24 let data = this.categoryList;
25 data.map(item => {
26 let _index = +item.name + 1;
27 item.index = item.name;
28 item.name = '类别' + _index;
29 return item;
30 });
31 let option = setPieOption(text, data);
32
33 // 使用刚指定的配置项和数据显示图表。
34 myChart.setOption(option);
35 window.addEventListener('resize', function () {
36 setTimeout(function () {
37 myChart.resize();
38 }, 200)
39 });
40 });
41 }
42 }
43 }
44 </script>
  • 部分代码片段,pieConfig.js

  1 import color from '@/util/colorConfig.js';
2
3 // 饼图
4 export const setPieOption = (text, data) => {
5 let newColor = [];
6 data.map((item, index) => {
7 newColor[index] = color[item.index];
8 });
9
10 let option = {
11 title: {
12 show: false,
13 text,
14 textStyle: {
15 color: '#666',
16 fontSize: 16,
17 fontWeight: 'normal',
18 top: '0',
19 left: '30%'
20 }
21 },
22 tooltip: {
23 trigger: 'item'
24 },
25 legend: {
26 type: 'scroll',
27 orient: 'vertical',
28 right: 0,
29 align: 'auto',
30 top: 'center',
31 itemHeight: 8,
32 itemWidth: 8,
33 itemGap: 20,
34
35 icon: 'circle',
36 textStyle: {
37 padding: [4, 0],
38 rich: {
39 a: {
40 fontSize: 14,
41 width: 'auto'
42 // minWidth: '100'
43 },
44 b: {
45 fontSize: 12,
46 width: 3,
47 color: '#ccc'
48 },
49 c: {
50 fontSize: 14,
51 width: 50,
52 color: '#ccc'
53 },
54 d: {
55 fontSize: 14,
56 width: 40
57 }
58 }
59 },
60 formatter: function (params) {
61 // 添加
62 let _index,
63 total = 0;
64 data.forEach((item, index) => {
65 total += item.value;
66 if (item.name == params) {
67 _index = index;
68 }
69 });
70 let a = params.length < 15 ? params : params.slice(0, 15) + '...';
71 let arr = [
72 '{a|' + a + '}',
73 '{b|' + '|}',
74 '{c|' + ((data[_index].value / total) * 100).toFixed(0) + '%}',
75 '{d|' + data[_index]?.value + '条}'
76 ];
77 return arr.join(' ');
78 }
79 },
80 color: newColor,
81 series: [
82 {
83 // name: 'Access From',
84 type: 'pie',
85 radius: '70%',
86 center: ['20%', '50%'],
87 avoidLabelOverlap: false,
88 label: {
89 show: false,
90 position: 'center'
91 },
92 labelLine: {
93 show: false
94 },
95 data,
96 itemStyle: {
97 borderRadius: 0,
98 borderColor: '#fff',
99 borderWidth: 2,
100 emphasis: {
101 shadowBlur: 10,
102 shadowOffsetX: 0,
103 shadowColor: 'rgba(0, 2, 2, 0.3)'
104 }
105 }
106 }
107 ]
108 };
109 return option;
110 };
  • 颜色配置代码片段,colorConfig.js

 1 let colorArr = [
2 '#4EADFF',
3 '#55D9FA',
4 '#9CA5E9',
5 '#2E98F3',
6 '#5FCAD2',
7 '#69C97F',
8 '#F2CA30',
9 '#FFA97A',
10 '#DAC4AA',
11 '#CF98E9',
12 '#F6B4DE',
13 '#F37379',
14 '#98ACC3',
15 '#75E4C1',
16 '#BEDC63',
17 '#98CFD0',
18 '#9B92F1',
19 '#26A479',
20 '#6068B3',
21 '#AE9E42',
22 '#D17952'
23 ];
24
25 export default colorArr;

鉴定完毕,欢迎友们一起交流学习!!

vue2实现饼图Pie组件封装的更多相关文章

  1. vue2.0 如何自定义组件(vue组件的封装)

    一.前言 之前的博客聊过 vue2.0和react的技术选型:聊过vue的axios封装和vuex使用.今天简单聊聊 vue 组件的封装. vue 的ui框架现在是很多的,但是鉴于移动设备的复杂性,兼 ...

  2. Vue2.0的通用组件

    饿了么基于Vue2.0的通用组件开发之路(分享会记录)   Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库. ...

  3. Vuejs 页面的区域化与组件封装

    组件的好处 当我用vue写页面的时候,大量的数据页面渲染,引入组件简化主页面的代码量,当代码区域块代码差不多相同时,组件封装会更加简化代码.组件是Vue.js最强大的功能之一. 组件可以扩展HTML元 ...

  4. 基于vue2.0的分页组件开发

    今天安排的任务是写基于vue2.0的分页组件,好吧,我一开始是觉得超级简单的,但是越写越写不出来,写的最后乱七八糟的都不知道下句该写什么了,所以重新捋了思路,小结一下- 首先写组件需要考虑: 要从父组 ...

  5. vue2.0实现分页组件

    最近使用vue2.0重构项目, 需要实现一个分页的表格, 没有找到合适的组件, 就自己写了一个, 效果如下: 该项目是使用 vue-cli搭建的, 如果你的项目中没有使用webpack,请根据代码自己 ...

  6. ReactNative之从HelloWorld中看环境搭建、组件封装、Props及State

    开篇呢,先给大家问个好,今天是中秋节,祝大家中秋节快乐!!虽然是中秋节,但是木有回家还是总结一下知识点写写博客吧,想着昨天总结一下的,但是昨天和几个同学小聚了一下,酒逢知己总是千杯少呢,喝的微醺不适合 ...

  7. Vue + Element UI 实现权限管理系统 (功能组件封装)

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  8. Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  9. picker(级联)组件及组件封装经验

    组件封装的几个经验 a.参数:最佳方式,仅一个object参数,所需要的实际参数,作为对象属性传入. 如此,便于数据的处理和扩展.例如,后期扩展需要增加参数,或者调整参数时,如果使用的对象传入,老的调 ...

  10. c# 通过.net自带的chart控件绘制饼图pie chart

    c# 通过.net自带的chart控件绘制饼图pie chart   需要实现的目标是: 1.将数据绑定到pie的后台数据中,自动生成饼图. 2.生成的饼图有详细文字的说明. 具体的实现步骤: > ...

随机推荐

  1. 体验了一把 MiniGPT-4,一言难尽

    最近看到一个好玩的开源项目:MiniGPT-4. 看名字像 GPT-4 的小老弟,其实没啥关系. 简单说,它可以识别图像,基于图像你可以和它对话,它能生成图片描述.网站.诗歌. 先看看官方给出的例子截 ...

  2. chatgpt入口,免费在线chatgpt--与人工智能聊天?尝试chatgpt入口,免费在线chatgpt吧!

    介绍一款人工智能聊天机器人--chatgpt入口 chatgpt是一款智能聊天机器人,它能够与人类进行自然语言对话,可以回答问题.提供建议,还可以玩游戏和聊天互动,是当前最受欢迎的人工智能聊天工具之一 ...

  3. 如何在long-running task中调用async方法

    什么是 long-running thread long-running task 是指那些长时间运行的任务,比如在一个 while True 中执行耗时较长的同步处理. 下面的例子中,我们不断从队列 ...

  4. [ARM 汇编]高级部分—ARM汇编编程实战—3.3.2 嵌入式开发环境搭建

    搭建一个嵌入式开发环境主要包括以下几个部分: 安装交叉编译器 配置集成开发环境(IDE) 安装调试工具 下载和烧录程序 接下来,我们将详细介绍每个部分,并提供相应的实例. 安装交叉编译器 交叉编译器是 ...

  5. Rainbond助力“信创应用”迁移上云

    Rainbond v5.14.2 版本,又称信创版本.从这个版本开始,开源用户也可以利用 Rainbond 管理符合信创要求的硬件计算资源.在这个版本中,产品团队将此前只在企业版产品中存在的信创相关功 ...

  6. TCP/IP网络体系结构中,各层的作用,以及各层协议的作用。

    1.[TCP/IP]协议中每层的作用 从协议分层模型方面来讲,TCP/IP由四个层次组成:数据链路层(网络接口层).网络层.传输层.应用层 TCP/IP网络体系结构中,各层作用: 1.网络接口层:负责 ...

  7. 分享一个Java功能小案例(代码已开源哦)

    工程合集 工程列表 地址预览 B站 抖音

  8. 用字符串表达式执行引擎消除掉if else if

    背景 最近我搞了个微信机器人,@机器人 xxx 这样来发送命令 能拿到的信息有,消息内容,消息发送人,消息所在的群id等 需要根据消息内容或者消息发送群id等不同的条件组合来决定走哪个处理逻辑. 简单 ...

  9. Codeforces Round #885 (Div. 2) A-D

    比赛链接 A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; bool solve() { i ...

  10. ranger2.1.0源码编译以及安装

    ranger2.1.0源码编译以及安装 编译环境准备 环境需求 示例版本 JDK8 Java(TM) SE Runtime Environment (build 1.8.0_231-b11) mave ...