实现如下效果:

效果展示: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. 函数接口(Functional Interfaces)

    定义 首先,我们先看看函数接口在<Java语言规范>中是怎么定义的: 函数接口是一种只有一个抽象方法(除Object中的方法之外)的接口,因此代表一种单一函数契约.函数接口的抽象方法可以是 ...

  2. CF1817E Half-sum

    题意 有一个大小为 \(N\) 的非负整数集合 \(A\),每次你可以从集合中取任意两个数,并将它们的平均数放回序列.不停操作,知道集合最后剩下两个数.请求出这两个数的差的绝对值的最大值对 \(10^ ...

  3. Pinot2的无人机传感器和摄像头

    目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 无人机传感器和摄像头在Pinot 2中得到广泛应用,其目的是为Pinot 2提供全面的传感器和 ...

  4. ASIC加速技术在ASIC加速性能优化中的新应用与挑战

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 4. 应用示例与代码实现讲解 5. 优化与改进 1. 引言 随着计算机技术的发展,芯片的性能和面积都得到了极大的提升.为了进一步提高芯片的 ...

  5. 图书商城项目练习②后端服务Node/Express/Sqlite

    本系列文章是为学习Vue的项目练习笔记,尽量详细记录一下一个完整项目的开发过程.面向初学者,本人也是初学者,搬砖技术还不成熟.项目在技术上前端为主,包含一些后端代码,从基础的数据库(Sqlite).到 ...

  6. 4.10 x64dbg 反汇编功能的封装

    LyScript 插件提供的反汇编系列函数虽然能够实现基本的反汇编功能,但在实际使用中,可能会遇到一些更为复杂的需求,此时就需要根据自身需要进行二次开发,以实现更加高级的功能.本章将继续深入探索反汇编 ...

  7. 即构低延迟直播产品L3,打造更优质的实时互动体验

    以短视频.直播为代表的音视频互动,正成为互联网主流的交互方式.拿直播举例,它从一种娱乐形式,逐渐融合于教育.娱乐.电商.旅游等多种生态中.未来,直播还将成为像水.电一样的基础设施. 然而,仅仅可进行音 ...

  8. CMOS信噪比与感光面积的关系

    前言 一般情况下,相同分辨率的sensor,如果感光面积越大,则其单位像素的感光面积也越大,成像质量也会越好.即相同分辨率品质相当的sensor,2/3"的传感器成像质量一般情况就要优于1/ ...

  9. Redis的设计与实现(3)-字典

    Redis 的数据库使用字典实现, 对数据库的增, 删, 查, 改也是构建在对字典的操作之上的. 字典是哈希键的底层实现之一: 当一个哈希键包含的键值对比较多, 又或者键值对中的元素都是比较长的字符串 ...

  10. switch写法详解

    我们在开发项目中经常遇到对数据的判断进行相应的逻辑(if..else  ,三元运算等),Switch 语句用来选择多个需要执行的代码块 ,一定程度上简化了if....else 1. 语法 switch ...