[ 蓝桥杯Web真题 ]-全球新冠疫情数据统计

目录

介绍

准备

目标

效果

规定

思路

参考实现


介绍

新冠疫情席卷全球,在此期间有很多免费的 API 和网站为人们提供了各个国家疫情数据的查询功能,这些免费公开的数据体现出了互联网作为信息媒介的优越性,帮助全球人民更好的了解一线疫情信息。

本题请实现一个可以对各个国家的新冠疫情数据统计的页面。

准备

开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:

├── css
│   └── style.css
├── effect.gif
├── index.html
└── js├── axios.js├── covid-data.json├── echarts.min.js└── vue.js

其中:

  • css/style.css 是样式文件。
  • index.html 是主页面。
  • js/axios.js 是 axios 文件。
  • js/vue.min.js 是 vue2.x 文件。
  • js/echarts.min.js 是 echarts 文件。
  • js/covid-data.json 是页面所用到的新冠数据。
  • effect.gif 是页面最终的效果图。

注意:打开环境后发现缺少项目代码,请复制下述命令至命令行进行下载:

cd /home/project
wget https://labfile.oss.aliyuncs.com/courses/18213/covid-page.zip
unzip covid-page.zip && rm covid-page.zip

在浏览器中预览 index.html 页面效果如下:

目标

请在 index.html 文件中补全代码,具体需求如下:

1.在组件加载时利用 axios 请求地址为 ./js/covid-data.json (必须使用该路径请求,否则可能会请求不到数据) 文件中的数据。并将所有国家名称在 select 标签下的 option 元素进行渲染(保留默认选项 “Select Country”),效果如下:

covid-data.json 数据参数说明

参数说明类型
Country国家名称string
CountryCode国家简称string
NewConfirmed新增确诊number
TotalConfirmed累计确诊number
NewDeaths新增死亡number
TotalDeaths累计死亡number

2.当用户改变 select 筛选器的选择时,根据用户的选择改变页面中展示的国家名以及确诊和死亡人数数据。如果用户没有选择任何国家,则展示默认值 0 和默认标题“请选择国家”。以选择法国为例:

3、页面底部的 ECharts 图表希望显示各个国家的累计确诊人数,请修改 initChart 函数的内容,使得图表 x 轴数据为国家简称,y 轴数据为累计确诊人数,效果如下:

效果

页面最终效果可参考 effect.gif 文件。

规定

请严格按照考试步骤操作,切勿修改考试默认提供项目中的文件名称、文件夹路径、class 名、id 名、图片名等,以免造成无法判题通过。


思路

本道题目主要用到的知识点为Vue的列表渲染,Echart图形库的使用、axios请求以及异步实现等。将获取到的数据存储在一个数组中,然后通过v-for来进行遍历,渲染在菜单列表中。然后需要根据其提供的参数列表找到对应每个对象中各个属性的含义,并进行相应的操作。最后需要给图标的x轴以及y轴来设置对应的数据,让其能够正常地显示。这里面需要注意到的点是需要先数据获取到之后在去进行图表的渲染,因此可以结合async以及await来实现。

参考实现

首先我们在data中声明一个数组,用于存储得到的数据。然后需要在mounted函数中使用axios来进行发送请求获取数据。这里面结合了async以及await让其数据加载之后在进行图形的渲染,这一步很关键,否则会得不到数据,图形加载不出来。

  data: {countries: [], },async mounted() {await axios.get('./js/covid-data.json').then(response => {this.countries = response.data;}).catch(error => {console.error('Error fetching data', error);});this.initChart();},

然后将得到的数据数组使用v-for渲染在选择器中。这里为选择器使用v-model双向绑定了selectedCountry,来获取选择到的国家。

<select v-model="selectedCountry"><option value="">Select Country</option><!-- 请在此渲染所有国家选项 --><option v-for="country in countries" :key="country.Country" :value="country.Country">{{ country.Country }}</option></select>

同时在data中设置其他的参数,用于数据的展示。

  data: {countries: [], selectedCountry: '',newConfirmed: 0,totalConfirmed: 0,newDeaths: 0,totalDeaths: 0,},

编写方法来用于选择不同国家时数据展示的不同。

 updateCountryData() {const selected = this.countries.find(country => country.Country === this.selectedCountry);if (selected) {this.newConfirmed = selected.NewConfirmed;this.totalConfirmed = selected.TotalConfirmed;this.newDeaths = selected.NewDeaths;this.totalDeaths = selected.TotalDeaths;} else {this.newConfirmed = 0;this.totalConfirmed = 0;this.newDeaths = 0;this.totalDeaths = 0;}}

若有选择到国家,则将对应的页面数据改为其国家的数据,否在都设置为0。同时来使用watch来监听当对应选择的国家改变时触发更新函数。

 watch: {selectedCountry() {this.updateCountryData();}}

如果用户没有选择任何国家,则展示默认值 0 和默认标题“请选择国家”。

<div class="title"><h2>{{ selectedCountry || '请选择国家' }}</h2></div>

最后设置x坐标的数据,以及y坐标的数据。

  xAxis: {data: this.countries.map(country => country.CountryCode), axisLabel: {show: true,interval: 0,}},series: [{data: this.countries.map(country => country.TotalConfirmed), type: 'bar',itemStyle: {normal: {color: '#a90000'}}},],

文件总代码:

<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>全球新冠疫情数据统计</title><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /><link rel="stylesheet" type="text/css" href="css/style.css" /><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script src="https://cdn.jsdelivr.net/npm/vue@2"></script><script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
</head><body><div id="app"><header><div>全球新冠疫情数据统计</div></header><main><!-- TODO: 请修改以下代码实现不同国家的数据展示功能 --><div class="title"><h2>{{ selectedCountry || '请选择国家' }}</h2></div><div class="boxes"><div class="box1"><h3>确诊</h3><div class="number"><span class="font-bold">新增:</span>{{ newConfirmed }}</div><div class="number"><span class="font-bold">总计:</span>{{ totalConfirmed }}</div></div><div class="box2"><h3>死亡</h3><div class="number"><span class="font-bold">新增:</span>{{ newDeaths }}</div><div class="number"><span class="font-bold">总计:</span>{{ totalDeaths }}</div></div></div><select v-model="selectedCountry"><option value="">Select Country</option><!-- 请在此渲染所有国家选项 --><option v-for="country in countries" :key="country.Country" :value="country.Country">{{ country.Country }}</option></select><div id="chart" style="width: 100%; height: 50vh;"></div></main></div>
</body><script>var vm = new Vue({el: "#app",data: {countries: [], selectedCountry: '',newConfirmed: 0,totalConfirmed: 0,newDeaths: 0,totalDeaths: 0,},methods: {// TODO: 请修改该函数代码实现题目要求initChart() {this.chart = echarts.init(document.getElementById("chart"));this.chartOptions = {title: {text: "全球感染人数前30国家累计确诊人数统计",x: 'center',},tooltip: {trigger: 'axis',axisPointer: {type: 'shadow',label: {show: true}}},xAxis: {data: this.countries.map(country => country.CountryCode), axisLabel: {show: true,interval: 0,}},yAxis: {type: 'value',name: '确诊数量',},series: [{data: this.countries.map(country => country.TotalConfirmed), type: 'bar',itemStyle: {normal: {color: '#a90000'}}},],};console.log('1111')console.log(this.chartOptions)this.chart.setOption(this.chartOptions);},updateCountryData() {const selected = this.countries.find(country => country.Country === this.selectedCountry);if (selected) {this.newConfirmed = selected.NewConfirmed;this.totalConfirmed = selected.TotalConfirmed;this.newDeaths = selected.NewDeaths;this.totalDeaths = selected.TotalDeaths;} else {this.newConfirmed = 0;this.totalConfirmed = 0;this.newDeaths = 0;this.totalDeaths = 0;}}},// TODO: 请在此添加代码实现组件加载时数据请求的功能async mounted() {await axios.get('./js/covid-data.json').then(response => {this.countries = response.data;}).catch(error => {console.error('Error fetching data', error);});this.initChart();},watch: {selectedCountry() {this.updateCountryData();}}});
</script></html>

好啦,本文就到这里啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/259353.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8s 入门指南(一):单节点集群环境搭建

前言 官方文档&#xff1a;Kubernetes 文档 | Kubernetes 系统配置 CentOS 7.9&#xff08;2 核 2 G&#xff09; 本文为 k8s 入门指南专栏&#xff0c;将会使用 kubeadm 搭建单节点 k8s 集群&#xff0c;详细讲解环境搭建部署的细节&#xff0c;专栏后面章节会以实战代码介绍…

人工智能学习9(LightGBM)

编译工具&#xff1a;PyCharm 文章目录 编译工具&#xff1a;PyCharm lightGBM原理lightGBM的基础使用案例1&#xff1a;鸢尾花案例2&#xff1a;绝对求生玩家排名预测一、数据处理部分1.数据获取及分析2.缺失数据处理3.数据规范化4.规范化输出部分数据5.异常数据处理5.1删除开…

Centos7、Mysql8.0 load_file函数返回为空的终极解决方法--暨selinux的深入理解

零、问题背景 最近想换房&#xff0c;为了方便自己对比感兴趣的房子&#xff0c;因此决定将目标房源的基本信息放在表里&#xff0c;特别是要一目了然的看到众多房子的各种图纸和照片&#xff0c;因此决定要在Mysql8.0.34数据库中以二进制形式保存图片&#xff08;抛开合理性和…

如何设置和使用静态HTTP服务器

随着互联网技术的不断发展&#xff0c;越来越多的企业和个人开始使用静态HTTP服务器来展示自己的网站内容。静态HTTP服务器是指服务器上存储着静态网页文件&#xff0c;当用户请求访问这些网页时&#xff0c;服务器直接将文件发送给用户的浏览器进行展示。本文将介绍如何设置和…

基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(一)

目录 前言引言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境 相关其它博客工程源代码下载其它资料下载 前言 博主前段时间发布了一篇有关方言识别和分类模型训练的博客&#xff0c;在读者的反馈中发现许多小伙伴对方言…

深度学习之注意力机制

注意力机制与外部记忆 注意力机制与记忆增强网络是相辅相成的&#xff0c;神经网络去从内存中或者外部记忆中选出与当前输入相关的内容时需要注意力机制&#xff0c;而在注意力机制的很多应用场景中&#xff0c;我们的外部信息也可以看作是一个外部的记忆 这是一个阅读理解任务…

Learning Memory-guided Normality for Anomaly Detection 论文阅读

Learning Memory-guided Normality for Anomaly Detection 摘要1.介绍2.相关工作3.方法3.1网络架构3.1.1 Encoder and decoder3.1.2 Memory 3.2. Training loss3.3. Abnormality score 4.实验5.总结总结&代码复现&#xff1a; 文章信息&#xff1a; 发表于&#xff1a;cvpr…

高性能服务器框架

服务器同时监听多个客户请求是通过 select 系统调用实现的&#xff1b; 1.1 服务器编程框架 请求队列是各单元之间通信方式的抽象&#xff1b; 1.2 IO 模型 &#xff08;1&#xff09;阻塞 IO&#xff1a;阻塞的文件描述符 非阻塞 IO&#xff1a;非阻塞的文件描述符 &#…

vue项目新增弹窗打开时:其中邮箱和密码被默认设置为当前登录的账号和密码

解决方法&#xff1a;就是在input的前后分别再添加一个input&#xff08;注意截图顺序不能错{密码放前面、邮箱放后面}&#xff09;

Google刚发布AlphaCode 2,让我们码农多了个小伙伴一起干活

除了其Gemini生成式人工智能模型之外&#xff0c;谷歌今天早上发布了AlphaCode 2&#xff0c;这是谷歌DeepMind实验室大约一年前推出的代码生成AlphaCode的改进版本。 事实上&#xff0c;AlphaCode 2实际上由Gemini提供支持&#xff0c;或者至少是由Gemini的某个变体&#xff…

上个月暴涨34.6%后,SoundHound AI股票现在还能买入吗?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 揭开SoundHound AI股价波动的原因 S&P Global Market Intelligence的数据显示&#xff0c;在摆脱了10月份的大幅下跌后&#xff0c;SoundHound AI的股价在11月份实现了34.6%的涨幅。 原因是该公司公布了稳健的第三季…

基于SSM的java衣服商城

基于SSM的java衣服商城 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 项目类型&#xff1a;Java EE项目 项目名称&#xff1a;基于SSM的美衣商城 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 前端技术&#xff1a;Layui等 后端技术…