文章目录
- Echarts大项目
-
- 前言
- 1.所用技术详解
-
- 1.1 vue技术
- 1.2 Echarts技术
- 1.3 koa2技术
- 2.后台的搭建
-
- 2.1需要实现的效果
- 2.2效果实现
-
- 2.2.1搭建koa2基本架构
- 2.2实现代码
- 2.3最终效果显示
- 3.前端项目搭建
-
- 3.1下载vue-cli并创建一个柱状图
-
- 3.1.1利用vue-cli搭建项目
- 3.1.2配置echart和axios
- 4.开发一个单页面效果图(柱状图)
-
- 4.1在src文件夹下创建view和compent文件夹。
- 4.2书写实现柱状图的代码
-
- 4.2.1搭建基本架构
- 4.2.2需要实现的功能
- 5.完整项目
- 6.总结
文章图片
Echarts大项目
??作者简介:大家好我是言不及行yyds前言
个人主页:言不及行yyds的CSDN博客
系列专栏:【前端】
本次项目用到的技术:1.所用技术详解 1.1 vue技术
1.Echart
2.vue
3.koa2
本次项目的练习,是跟着黑马教程中关于Echarts的教程,学习的
视频地址
在使用这个技术的过程中,主要是用到关于组件的创建,以及路由的使用。以及在
组件中创建各种方法,用于处理数据。
所以说,在上手这个项目时,你应该对于vue有一定的基础。vue官网
在使用时,主要是创建7个主组件(后续会合并成一个组件)六个子组件1.2 Echarts技术
在子组件中书写接收后台的数据的方法,以及配置Echarts的配置项。处理
呈现效果的处理
关于这个,你需要有一点入门的基础,可以Echarts入门参考这篇文章
那么在这个项目中主要是创建饼图,柱状图,地图,折线图。
所以说你需要了解关于他们怎么创建,以及配置效果
1.3 koa2技术
koa2技术与express是由同一个技术团队推出的,效果与express相同。
那么如果你有一定的express基础的话,那么koa2就计较简单了。
你可以参考这篇文章5分钟入手熟悉express
在koa2技术中主要是搭建本地服务器(后台)用于读取相关的本地文件数据,
进行格式转换,创建接口,用于在前台访问接口并获取数据
2.后台的搭建 2.1需要实现的效果
- 根据URL读取指定目录下的文件内容
为了简化后台服务器的代码,前端图表所要的数据, 并没有存在数据库当中,2.2效果实现
而是将存在文件当中 的,这种操作只是为了简化咱们后台的代码.
所以咱们是需要去读取某一个目录下面的文件内容
2.2.1搭建koa2基本架构
- 安装
npm init -y
npm i koa(注意不是koa2)
- 创建基本代码
const koa=require("koa")
const app=new koa()
app.listen(8888)
- 目录结构
文章图片
app.js 是后台服务器的入口文件2.2实现代码
data 目录是用来存放所有模块的 json 文件数据
middleware 是用来存放所有的中间件代码
koa_response_data.js 是业务逻辑中间件
koa_response_header.js 是用来专门设置响应头的中间件
- koa_response_data.js
// 处理业务逻辑的中间件,读取某个json文件的数据
const path = require('path')
const fileUtils = require('../utils/file_utils')
module.exports = async (ctx, next) => {
// 根据url
const url = ctx.request.url // /api/seller../data/seller.json
let filePath = url.replace('/api', '') // /seller
filePath = '../data' + filePath + '.json'// ../data/seller.json
filePath = path.join(__dirname, filePath)
try {
const ret = await fileUtils.getFileJsonData(filePath)
ctx.response.body = ret
file_utils.js
5.允许跨域
设置响应头
} catch (error) {
const errorMsg = {
message: '读取文件内容失败, 文件资源不存在',
status: 404
}
ctx.response.body = JSON.stringify(errorMsg)
}
console.log(filePath)
await next()
}
- file_utils.js
// 读取文件的工具方法
const fs = require('fs')
module.exports.getFileJsonData = https://www.it610.com/article/(filePath) => {
// 根据文件的路径, 读取文件的内容
return new Promise((resolve, reject) => {
fs.readFile(filePath, 'utf-8', (error, data) => {
if(error) {
// 读取文件失败
reject(error)
} else {
// 读取文件成功
resolve(data)
}
})
})
}
- koa_response_header.js(用于设置访问解决跨域)
module.exports = async (ctx, next) => {
const contentType = 'application/json;
charset=utf-8'
ctx.set('Content-Type', contentType)
ctx.set("Access-Control-Allow-Origin", "*")
ctx.set("Access-Control-Allow-Methods", "OPTIONS, GET, PUT, POST, DELETE")
await next()
}
- app.js
// 服务器的入口文件
// 1.创建KOA的实例对象
const Koa = require('koa')
const app = new Koa()
// 2.绑定中间件
const respDataMiddleware = require('./middleware/koa_response_data')
app.use(respDataMiddleware)
// 3.绑定端口号 8888
app.listen(8888)
- data中的json数据,我会放在评论区
文章图片
需要注意的是,在游览器中打开8888端口号,后面加/api/+(你需要访问的数据)
比如 localhost:8888/api/map
在创建的后台项目中打开终端,运行node app.js
732
3.前端项目搭建 3.1下载vue-cli并创建一个柱状图
3.1.1利用vue-cli搭建项目
npm i -g @vue/cli删除无关的代码。
vue create vision
cd vision
npm run serve
- 修改 App.vue 中的代码,将布局和样式删除, 变成如下代码:
="less">
- 删除 components/HelloWorld.vue 这个文件
- 删除 views/About.vue 和 views/Home.vue 这两个文件
- 修改 router/index.js 中的代码,去除路由配置和 Home 组件导入的代码
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const routes = []
const router = new VueRouter({
routes
})
export default router
3.1.2配置echart和axios
将echart和axios挂载在Vue 原型中,可在后面的组件会方便许多
- echarts配置
在main.js中加入
// 将全局echarts对象挂载到Vue的原型对象上
Vue.prototype.$echarts = window.echarts
在public中引入echarts(echarts是下载好的,放在public文件先static的lib文件下)
在index.html中引入就可以了。
- echarts使用
this.$echarts
- axios的引入及配置(在main.js中配置)
npm i axios
import axios from 'axios'
// 请求基准路径的配置
axios.defaults.baseURL = 'http://127.0.0.1:8888/api/'
// 将axios挂载到Vue的原型对象上
// 在别的组件中 this.$http
Vue.prototype.$http = axios
- axios的使用
this.$http4.开发一个单页面效果图(柱状图)
954
4.1在src文件夹下创建view和compent文件夹。
在创建的两个文件夹下分别创建SellerPage.vue(用于承接Seller.vue的效果)和seller.vue
- 将SellerPage.vue和seller.vue配置在路由中
- sellerPage.vue
/>
>
//引入Seller组件
import Seller from '../components/Seller.vue'
export default {
methods:{
},
//将组件配置在sellerPage中
components:{
seller: Seller,
}
}
>
- router文件夹下的index.js
importfrom '../view/SellerPage.vue'
const routes = [
{
path: '/sellerpage',
component: SellerPage
},
]
- 在App.vue中
//占位符号
import SellerPage from './view/SellerPage.vue';
export default {
name: "App",
components: {
SellerPage
}
}
- Seller.vue加入
Seller组件
4.2书写实现柱状图的代码
4.2.1搭建基本架构
在这个基本架构中。我分为三个部分。在每个部分
设置不同的option。用于后期的管理比较方便
//seller.vue
export default {
data() {
return {
}
},
mounted() {
//调用 initCharts
this.initCharts()
this.getDate()
//监听屏幕尺寸大小的改变
window.addEventListener('resize', this.updataScreen)
this.updataScreen()
},
destroyed() {
//移除监听屏幕尺寸大小的改变
window.removeEventListener('resize', this.updataScreen)
},
methods: {
//初始化echart对象
initCharts() {
this.echartsInstance = this.$echarts.init(this.$refs.seller_ref, 'chalk')
const initOption = {
}
this.echartsInstance.setOption(initOption)
},
//获取后台数据
getDate() {
},
updataEchart() {
},
//调整效果图的文字大小及图形自适应改变
updataScreen() {
//设置字体大小
const titleFontsize = this.$refs.seller_ref.offsetWidth / 100 * 3.6
const upscreenOption = {
}
this.echartsInstance.setOption(upscreenOption)
this.echartsInstance.resize()
}
}
}
4.2.2需要实现的功能
1.数据分页显示。(设置定时器,改变需要改变的页数)
2.提示框的显示(tooltip的设置)
3.调整柱状图的形状(配置Echart的series选项)。
export default {
data() {
return {
echartsInstance: null,
allDate: null,
//标记当前页数
currentPage: 1,
//记录总页数
totalPage: 0,
//标记定时器用于,在适当的时期,取消定时器
timeid: null
}
},
mounted() {
this.initCharts()
this.getDate()
window.addEventListener('resize', this.updataScreen)
this.updataScreen()
},
destroyed() {
clearInterval(this.timeid)
window.removeEventListener('resize', this.updataScreen)
},
methods: {
initCharts() {
this.echartsInstance = this.$echarts.init(this.$refs.seller_ref, 'chalk')
//配置初始化option
const initOption = {
grid: {
top: '15%',
left: '3%',
right: '6%',
bottom: '3%',
containLabel: true
},
title: {
text: ' 商家销售表'
},
tooltip: {
show: true
},
xAxis: {
type: 'value'
},
yAxis: {
type: 'category'
},
series: {
type: 'bar',
label: {
show: true,
position: 'right',
textStyle: {
color: "white"
},
},
itemStyle: {
barBorderRadius: [0, 33, 33, 0],
color: new this.$echarts.graphic.LinearGradient(0, 0, 1, 0, [
// 百分之0状态之下的颜色值
{
offset: 0,
color: '#5052EE'
},
// 百分之100状态之下的颜色值
{
offset: 1,
color: '#AB6EE5'
}
])
}
},
toolbox: {
show: true,
feature: {
saveAsImage: {
show: true
},
restore: {
show: true
},
dataView: {
show: true
},
dataZoom: {
show: true
},
magicType: {
show: true,
type: ['line', 'bar']
}
},
iconStyle: {
color: "skyblue",
},
top: 20,
right: 100,
itemGap: 20,
itemSize: 20
},
}
this.echartsInstance.setOption(initOption)
},
//配置数据化option
async getDate() {
const { data: ret } = await this.$http.get('seller')
this.allDate = ret.sort((a, b) => {
return a.value - b.value
})
this.totalPage = this.allDate.length % 5 === 0 ? parseInt(this.allDate.length / 5) : parseInt(this.allDate.length / 5) + 1
this.updataEchart()
this.startIntever()
},
//配置屏幕尺寸大小改变后的效果显示
updataEchart() {
const start = (this.currentPage - 1) * 5
const end = this.currentPage * 5
const showDate = this.allDate.slice(start, end)
const xAxisArr = showDate.map(item => {
return item.value
})
const yAxisArr = showDate.map(item => {
return item.name
})
const dataOption = {
yAxis: {
data: yAxisArr
},
series: {
data: xAxisArr
},
}
this.echartsInstance.setOption(dataOption)
},
startIntever() {
if (this.timeid) {
clearInterval(this.timeid)
}
this.timeid = setInterval(() => {
this.currentPage++
if (this.currentPage > this.totalPage) {
this.currentPage = 1
}
this.updataEchart()
}, 3000)
},
updataScreen() {
const titleFontsize = this.$refs.seller_ref.offsetWidth / 100 * 3.6
const upscreenOption = {
title: {
textStyle: {
fontSize: titleFontsize
},
},
tooltip: {
axisPointer: {
lineStyle: {
width: titleFontsize,
}
}
},
series: [
{
barWidth: titleFontsize,
barBorderRadius: [0, titleFontsize / 2, titleFontsize / 2, 0]
}
]
}
this.echartsInstance.setOption(upscreenOption)
this.echartsInstance.resize()
}
}
}
关于上面的一些option配置,你可以5.完整项目
根据官网进行你自己认为有趣的配置
编写六个单页面,最终显示到一个页面。
然后处理,页面设计。
由于代码比较多,如果有需要的话,可以私信我。
205
6.总结
在这篇文章中你能学到什么
- 利用koa2搭建后台服务器,读取本地数据,用于想前端发送数据
- 学会搭建vue项目,熟悉vue的router的使用
- 学会怎样处理数据
- 了解怎么配置Echarts的一些属性配置,使呈现效果具有观赏性
【前端练手项目|学完Echarts,来个大项目练手(用到vue koa2 echarts技术)】写在最后
?原 创 不 易期待能给博主 点 赞 ?? 收 藏 ?? 评 论
文章图片
推荐阅读
- 前端扩展知识|Echart前端的修饰器,你不来看看吗()
- 力扣刷题|前端力扣刷题_数据结构篇(队列&栈)
- 前端|nginx基础学习
- js脚本文件中的WordPress路径URL
- WordPress的媒体按钮设置
- js|零基础JavaScript入门学习笔记
- javascript|学习js高级第一期笔记
- 前端从0基础到找工作|JavaScript零基础通关(7)数组元素的类型,获取数组元素,遍历数组,-求数组当中的最大值新增数组元素函数的使用
- var上的WordPress JS引用错误