想成为可视化高手?这篇合集就够了 | Vue
前言
在生活中"可视化"对我们来说其实并不陌生,网站上各大图表频频而出,给我们的视觉也带来很直观的感受。下面我们就"可视化"而言,讨论一下,echarts和highcharts在vue里怎么灵活使用,如何解决出现的问题和难点。
准备工作
echarts和highcharts的区别:
echarts就相当于我们平时用的wps,而highcharts就相当于我们使用的office,前者是百度的api,后者是国外的api。
echarts官网像是一本使用说明书:
https://echarts.apache.org/examples/zh/index.html
highcharts官网就像是一个博客:
https://www.highcharts.com.cn/demo/highcharts
echarts
安装echarts
$ npm i echarts -S
引入echarts
import Echarts from "echarts";
//设置全局变量
Vue.prototype.$echarts = Echarts;
使用echarts(我们这里以bar图为例)
<template>
<div ref="myChart" style="width:200px;height:200px"></div>
</template>
<script>
export default{
data(){
return {
barChart: {
xAxisData:["第一列","第二列","第三列"],
yAxisData: [5, 20, 36]
}
},
mounted:{
this.drwaCharts();
},
methods:{
drawCharts(){
// 基于准备好的dom,初始化echarts实例
this.myChart = this.$echarts.init(this.$refs.myChart);
// 绘制图表
this.myChart.setOption({
color: [
"#7cb5ec",
"#434348",
"#90ed7d",
"#f7a35c",
"#8085e9",
"#f15c80",
"#e4d354",
"#2b908f",
"#f45b5b",
"#91e8e1"
],
title: { text: "标题", left: "center" },
tooltip: {},
xAxis: {
type: "category",
data: this.barChart.xAxisData,
axisLabel: {
rotate: 45
}
},
yAxis: {
type: "value",
name: "数量"
},
series: [
{
type: "bar",
barCategoryGap: "50%",
data: this.barChart.yAxisData
}
]
});
}
}
}
</script>
注意
[Vue warn]: Error in mounted hook: "TypeError: Cannot read property 'getAttribute' of null"
我们在开发过程中我们在运行Vue项目的时候出现了上述错误,出现该错误的原因是Echatrs的图形容器还没生成就对其进行了初始化造成。为了解决这个问题小编给大家提供了一下几种方法,供参考。
解决方法
1、如果在项目中我们使用document.getElementById()获取dom的话,我们可以使用ref和$refs来代替。
2、如果我们在项目中Echatrs的图形容器还没生成就对其进行了初始化造成,我们可以使用this.$nextTick(()=>{})把代码放到该函数里即可。
这个时候可能有人会问,如果要让echarts自适应窗口呢,下面小编整理了一种方法,使用到了vue中的自定义指定directives和原生js中的事件绑定我们直接上代码:
import echarts from "echarts";
let HANDLER = "Vue_eCharts_Resize_Handle";
function unbind(el, bindings, vnode) {
window.removeEventListener("resize", el[HANDLER]);
delete el[HANDLER];
}
/**
* 自定义echart自适应伸缩屏幕
*/
export default {
echartResize: {
bind(el, bindings, vnode) {
unbind(el);
el[HANDLER] = function() {
let chart = echarts.getInstanceByDom(el);
if (!chart) {
return;
}
chart.resize();
};
window.addEventListener("resize", el[HANDLER]);
},
unbind: unbind
}
};
如何使用vue里的自定义指令呢
自定义指令
我们可以注册一个全局指令v-echarts-resize
import util from "@/directives/echartsHelper.js";
Vue.directive('echartsResize',util.echartResize)
当然也可以注册局部指令,组件会接受一个directives的选项:
import util from "@/directives/echartsHelper.js";
directives: {
echartsResize: util.echartResize
}
开箱即用
小编给大家推荐vue-echarts
https://github.com/ecomfe/vue-echarts
vue-highcharts
安装
$ npm i highcharts-vue -S
引入项目
import { Chart } from "highcharts-vue";
import Highcharts from "highcharts";
import NoDataToDisplay from "highcharts/modules/no-data-to-display.js";
import treemap from "highcharts/modules/treemap";
import heatmap from "highcharts/modules/heatmap";
heatmap(Highcharts); //热力图组件
treemap(Highcharts); //矩形树图组件
NoDataToDisplay(Highcharts); //没数据组件
使用vue-highcharts
<template>
<highcharts :options="chartOptions" class="bg-purple">
</template>
<script>
export default{
data(){
return {
chartOptions:{
lang: {
noData: "暂无数据"
},
title: {
text: "标题",
align: "left",
verticalAlign: "top",
style: {
fontSize: 14,
lineHeight: 20,
fontWeight: 700
}
},
credits: {
enabled: false
},
tooltip: {
headerFormat: "",
pointFormat: "{point.name}: <br />个数:<b>{point.y}</b><br />版本:<b>{point.version}</b>"
},
colors: [
"#7cb5ec",
"#434348",
"#90ed7d",
"#f7a35c",
"#8085e9",
"#f15c80",
"#e4d354",
"#2b908f",
"#f45b5b",
"#91e8e1"
],
plotOptions: {
pie: {
dataLabels: {
useHTML: true,
enabled: true,
distance: -40,
style: {
fontWeight: "normal",
textOutline: "none",
color: "#fff"
}
},
startAngle: -90, // 圆环的开始角度
endAngle: 90, // 圆环的结束角度
center: ["50%", "100%"],
size: "130%"
}
},
series: [
//如果没有数据,这个变成[]数组即可
{
type: "pie",
name: "标题",
innerSize: "50%",
data: [
{ name: "aaa", y: 1, version: ["1"] },
{ name: "bbb", y: 2, version: ["2"] }
]
}
]
}
}
}
}
</script>
- Jquery ajax调用后台aspx后台文件方法(不是ashx)
- [原创]x.509证书在WCF中的应用(CS篇)
- tomcat
- 快速入门系列--WebAPI--01基础
- 分析程序员到底是不是吃青春饭
- Jquery dom搜索之siblings()方法
- 汽车黑科技!想想以后不是我们亲自驾驶汽车还是蛮开心的
- 快速入门系列--CLR--02多线程
- JavaScript之将JS代码放在什么位置最合适
- 快速入门系列--TSQL-01基础概念
- 初识javascript
- [原创]x.509证书在WCF中的应用(Web/IIS篇)
- Javascript之Dom学习
- 考试备战系列--软考--01基础架构概念
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅谈文件上传漏洞(客户端JS检测绕过)
- java字符串操作:如何实现字符串的反转及替换?
- 树莓派基础实验10:干簧管传感器实验
- Java 字节流 字符流 io流
- 写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分 隔。
- 树莓派基础实验11:U型光电传感器实验
- java 缓冲流+原理图解
- 写一个函数,2 个参数,1 个字符串,1 个字节数,返回截取的字符串,要 求字符串中的中文不能出现乱码
- Java 编程,打印昨天的当前时刻.
- git merge后 丢失文件 以及 代码
- 树莓派基础实验12:PCF8591模数转换器实验
- spring boot多数据源的代码实现
- 树莓派基础实验13:雨滴探测传感器实验
- Java中的TCP通信程序
- Java实现一个简单的文件上传案例