vue前端案例教学:动态获取最新疫情数据展示(代码详解)

news2024/11/15 12:26:08

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!

博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!

吾等采石之人,应怀大教堂之心,愿我们奔赴在各自的热爱里…

一、案例介绍

在这里插入图片描述

分享原因:最近看到这样的实时显示的系统觉得很有趣,分享给vue前端初学者实践学习 具体的效果如图所示

数据分析:数据来源于第三方官方提供的API接口,我们调用即可获取对应接口,拿到显示出来即实时展示

百度一下有很多可以直接调用的第三方接口

实时最新疫情数据接口

https://c.m.163.com/ug/api/wuhan/app/data/list-total

实时播报:时间线的对应接口

https://ent.163.com/special/00035080/virus_report_data.js

在这里插入图片描述


二、后端代码

后端使用HttpClient创建对象,执行对应的请求即可~

@Slf4j
@RestController
@RequestMapping("/demo")
public class DemoController {

    @ApiOperation("/HttpClient使用代码案例")
    @GetMapping("/getData")
    public Result getJsonTypeData(@RequestParam(name = "url", required = true) String url) throws Exception {
        Result result = new Result();
        //创建HttpClient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        //设置请求传输超时时间
        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000)
                .setConnectionRequestTimeout(5000)
                .setSocketTimeout(5000)
                .setRedirectsEnabled(true)
                .build();
        //创建get请求
        HttpGet httpGet = new HttpGet(url);
        //设置配置
        httpGet.setConfig(requestConfig);
        // 执行请求
        HttpResponse  httpResponse = httpClient.execute(httpGet);
        //判断响应信息是否正确
        if (httpResponse.getStatusLine().getStatusCode() == 200) {
            String jsonResult = EntityUtils.toString(httpResponse.getEntity());
            JSONObject jsonObject = JSONObject.parseObject(jsonResult);
            result.setData(jsonObject);
            result.setCode(200);
        }
        return result;
    }

    @ApiOperation("/实时播报:时间线的对应接口:此处仅给右下角显示使用")
    @GetMapping("/getTimeLine")
    public Result getNoJsonType(@RequestParam(name = "url", required = true) String url) throws IOException {
        Result result = new Result();
        //创建HttpClient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000)
                .setConnectionRequestTimeout(5000)
                .setSocketTimeout(5000)
                .setRedirectsEnabled(true)
                .build();
        HttpGet httpGet = new HttpGet(url);
        httpGet.setConfig(requestConfig);
        HttpResponse httpResponse = httpClient.execute(httpGet);
        if (httpResponse.getStatusLine().getStatusCode() == 200) {
            String jsonResult = EntityUtils.toString(httpResponse.getEntity());
            result.setData(jsonResult);
            result.setCode(200);
        }
        return result;
    }
}


三、前端代码

主页面代码以及效果

在这里插入图片描述

<template>
    <div class="container">
        <el-card class="box-card1">
            <div slot="header" class="title">全国疫情数据(含港澳台)</div>
            <div class="list-total">
                <div class="item cover_input">
                    <h4>境外输入</h4>
                    <div class="number">{{ total.input }}</div>
                    <p class="added">
                        较昨日
                        <span>+{{ today.input }}</span>
                    </p>
                </div>
                <div class="item cover_nosymptom">
                    <h4>无症状感染者</h4>
                    <div class="number">{{ extData.noSymptom }}</div>
                    <p class="added">
                        较昨日
                        <span>+{{ extData.incrNoSymptom }}</span>
                    </p>
                </div>
                <div class="item cover_today_confirm">
                    <h4>现有确诊</h4>
                    <div class="number">
                        {{ total.confirm - total.dead - total.heal }}
                    </div>
                    <p class="added">
                        较昨日
                        <span>+{{ today.storeConfirm }}</span>
                    </p>
                </div>
                <div class="item cover_confirm">
                    <h4>累计确诊</h4>
                    <div class="number">{{ total.confirm }}</div>
                    <p class="added">
                        较昨日
                        <span>+{{ today.confirm }}</span>
                    </p>
                </div>
                <div class="item cover_dead">
                    <h4>累计死亡</h4>
                    <div class="number">{{ total.dead }}</div>
                    <p class="added">
                        较昨日
                        <span>+{{ today.dead }}</span>
                    </p>
                </div>
                <div class="item cover_heal">
                    <h4>累计治愈</h4>
                    <div class="number">{{ total.heal }}</div>
                    <p class="added">
                        较昨日
                        <span>+{{ today.heal }}</span>
                    </p>
                </div>
            </div>
            <div class="cover_time">截至{{ lastUpdateTime }}</div>
        </el-card>
        <china-map></china-map>
        <line-chart id="line-chart"></line-chart>
        <time-line id="time-line"></time-line>
    </div>
</template>

<script>
    import request from "@/utils/request";
    import LineChart from './components/lineChart.vue'
    import ChinaMap from './components/map.vue'
    import TimeLine from './components/timeLine.vue'

    export default {
        name: 'Statistics',
        components: {
            LineChart,
            ChinaMap,
            TimeLine,
        },
        data() {
            return {
                total: {},
                today: {},
                extData: {},
                lastUpdateTime: '',
            }
        },
        created() {
            this.getInfo()
        },
        mounted() {
        },
        methods: {
            getInfo() {
                request.get("/demo/getData", {
                    params: {
                        url: 'https://c.m.163.com/ug/api/wuhan/app/data/list-total',
                    }
                }).then(data => {
                    this.today = data.data.data.chinaTotal.today
                    this.total = data.data.data.chinaTotal.total
                    this.extData = data.data.data.chinaTotal.extData
                    this.lastUpdateTime = data.data.data.lastUpdateTime
                })
            },
        },
    }
</script>
<style lang="scss" scoped>
    .box-card1 {
        width: 440px;
        float: left;
        margin-left: 20px;
    }

    .list-total {
        display: flex;
        flex-wrap: wrap;
        justify-content: space-around;
    }

    .title {
        color: #333;
        font-size: 24px;
    }

    .item {
        width: 120px;
        height: 100px;
        margin-bottom: 15px;
        border: 1px dashed #ccc;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-content: space-around;
    }

    h4 {
        text-align: center;
        color: #333;
    }

    .number {
        text-align: center;
        color: #ffa352;
        font-weight: 700;
        font-size: 26px;
    }

    .added {
        text-align: center;
        color: #999;
    }

    .added span {
        color: #ffa352;
    }

    .cover_nosymptom .added span {
        color: #791618;
    }

    .cover_nosymptom .number {
        color: #791618;
    }

    .cover_today_confirm .number {
        color: #e44a3d;
    }

    .cover_today_confirm .added span {
        color: #e44a3d;
    }

    .cover_confirm .number {
        color: #a31d13;
    }

    .cover_confirm .added span {
        color: #a31d13;
    }

    .cover_dead .number {
        color: #333;
    }

    .cover_dead .added span {
        color: #333;
    }

    .cover_heal .number {
        color: #34aa70;
    }

    .cover_heal .added span {
        color: #34aa70;
    }

    .cover_time {
        color: #a9a9a9;
    }
</style>

疫情地图显示效果
在这里插入图片描述

对应前端代码

<template>
  <el-card class="box-card">
    <div id="map"></div>
  </el-card>
</template>

<script>
  import * as echarts from 'echarts'
  import china from 'echarts/map/js/china'
  import request from "@/utils/request";
  let option = {
    title: {
      text: '中国疫情图',
    },

    series: [
      {
        name: '现有确诊', //控制鼠标hover上去显示的固定文本
        type: 'map', //告诉echarts需要渲染一个地图
        mapType: 'china', //告诉echarts要渲染注册的china地图
        label: {
          show: true, //控制是否显示省份的名称
          color: '#333', // 设置显示每个省份的字体颜色
        },
        itemStyle: {
          borderColor: '#e8e8e8', //每个省份的边界的颜色
        },
        emphasis: {
          //控制鼠标移入的版块的颜色
          color: '#fff', //移入该模块的字体颜色
          itemStyle: {
            areaColor: '#83b5e7', //鼠标hover到模块上的背景色
          },
        },
        data: [], //每个板块的数据
      },
    ],
    visualMap: [
      {
        type: 'piecewise', //左下角的分段显示
        show: true,
        pieces: [
          {
            min: 10000,
            max: 1000000,
            label: '≥ 10000人',
            color: '#7f1100',
          },
          {
            min: 1000,
            max: 9999,
            label: '1000 - 9999人',
            color: '#bd1316',
          },
          {
            min: 500,
            max: 999,
            label: '500 - 999人',
            color: '#e64b45',
          },
          {
            min: 100,
            max: 499,
            label: '100 - 499人',
            color: '#ff8c71',
          },
          {
            min: 10,
            max: 99,
            label: '10 - 99人',
            color: '#fdd2a0',
          },
          {
            min: 1,
            max: 9,
            label: '1 - 9人',
            color: '#fff2cf',
          },
          {
            min: 0,
            max: 0,
            label: '0',
            color: '#ffffff',
          },
        ],
        color: ['#fafafa', '#7f1100'],
      },
    ],
    tooltip: {
      //控制鼠标hover上去显示信息
      trigger: 'item',
      formatter: function (params) {
        //自定义悬浮窗的显示内容
        return params.name + '<br/>' + params.seriesName + ':' + params.value
      },
    },
  }
  export default {
    // 组件名称
    name: 'ChinaMap',
    // 组件参数 接收来自父组件的数据
    props: {},
    // 组件状态值
    data() {
      return {}
    },
    // 计算属性
    computed: {},
    // 侦听器
    watch: {},
    // 以下是生命周期钩子
    /**
     * 组件实例创建完成,属性已绑定,但DOM还未生成,$ el属性还不存在
     */
    created() {},
    /**
     * el 被新创建的 vm.$ el 替换,并挂载到实例上去之后调用该钩子。
     * 如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$ el 也在文档内。
     */
    mounted() {
      this.getData()
      this.myEcharts = echarts.init(document.getElementById('map'))
      this.myEcharts.setOption(option)
    },
    // 组件方法
    methods: {
       getData() {
         request.get("/demo/getData", {
           params: {
             url: 'https://c.m.163.com/ug/api/wuhan/app/data/list-total',
           }
         }).then(data => {
           let list = data.data.data.areaTree[2].children.map((item) => ({
             name: item.name,
             value: item.total.confirm - item.total.heal - item.total.dead,
           }))
           option.series[0].data = list
           this.myEcharts.setOption(option)
         })
      },
    },
  }
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<!--使用了scoped属性之后,父组件的style样式将不会渗透到子组件中,-->
<!--然而子组件的根节点元素会同时被设置了scoped的父css样式和设置了scoped的子css样式影响,-->
<!--这么设计的目的是父组件可以对子组件根元素进行布局。-->
<style scoped>
  #map {
    width: 100%;
    height: 400px;
    background-color: #f3f3f3;
  }
  .box-card {
    width: 750px;
    float: left;
    margin-left: 20px;
  }
</style>

折线图显示效果

在这里插入图片描述

折线图对应代码

<template>
    <el-card class="card-linechart">
        <div id="linechart"></div>
    </el-card>
</template>

<script>
    import * as echarts from 'echarts'
    import request from "@/utils/request";

    var option = {
        title: {
            text: '全国疫情新增趋势',
        },
        tooltip: {
            trigger: 'axis',
        },
        legend: {
            right: '20px',
            data: ['确诊', '疑似'],
        },
        xAxis: {
            type: 'category',
            boundaryGap: false,
            data: [],
        },
        yAxis: {
            type: 'value',
            data: ['0', '20', '40', '60', '80', '100', '120', '140'],
        },
        series: [
            {
                name: '确诊',
                type: 'line',
                data: [],
            },
            {
                name: '疑似',
                type: 'line',
                data: [],
            },
        ],
    }
    export default {
        // 组件名称
        name: 'LineChart',
        // 组件参数 接收来自父组件的数据
        props: {},
        // 组件状态值
        data() {
            return {
                chinaDayList: [],
            }
        },
        // 计算属性
        computed: {},
        // 侦听器
        watch: {},
        // 以下是生命周期钩子
        /**
         * 组件实例创建完成,属性已绑定,但DOM还未生成,$ el属性还不存在
         */
        created() {
        },
        /**
         * el 被新创建的 vm.$ el 替换,并挂载到实例上去之后调用该钩子。
         * 如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$ el 也在文档内。
         */
        mounted() {
            this.getData()
            this.myChart = echarts.init(document.getElementById('linechart'))
            this.myChart.setOption(option)
        },
        // 组件方法
        methods: {
            getData() {
                request.get("/demo/getData", {
                    params: {
                        url: 'https://c.m.163.com/ug/api/wuhan/app/data/list-total',
                    }
                }).then(data => {
                    this.chinaDayList = data.data.data.chinaDayList
                    option.series[0].data = []
                    option.series[1].data = []
                    option.xAxis.data = []
                    this.chinaDayList.forEach((item, index) => {
                        option.xAxis.data.push(item.date)
                        option.series[0].data.push(item.today.confirm)
                        option.series[1].data.push(item.today.suspect)
                    })
                    this.myChart.setOption(option)
                })

            },
        },
    }
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<!--使用了scoped属性之后,父组件的style样式将不会渗透到子组件中,-->
<!--然而子组件的根节点元素会同时被设置了scoped的父css样式和设置了scoped的子css样式影响,-->
<!--这么设计的目的是父组件可以对子组件根元素进行布局。-->
<style scoped>
    .card-linechart {
        float: left;
        width: 500px;
    }

    #linechart {
        width: 100%;
        height: 400px;
    }
</style>

时间线实现效果
在这里插入图片描述

时间线实现前端代码

<template>
    <el-card class="box-timeline">
        <div slot="header" class="bobao">实时播报</div>
        <el-timeline class="time-container">
            <el-timeline-item
                    v-for="(item, index) in timeLineList"
                    :key="index"
                    :timestamp="item.time"
                    placement="top"
            >
                <el-card class="content">
                    <div class="tit">{{ item.title }}</div>
                    <a :href="item.link" target="_blank" class="detail">查看详细报道</a>
                </el-card>
            </el-timeline-item>
        </el-timeline>
    </el-card>
</template>

<script>
    import request from "@/utils/request";

    export default {
        // 组件名称
        name: 'TimeLine',
        // 组件参数 接收来自父组件的数据
        props: {},
        // 组件状态值
        data() {
            return {
                timeLineList: [],
            }
        },
        // 计算属性
        computed: {},
        // 侦听器
        watch: {},
        // 以下是生命周期钩子
        /**
         * 组件实例创建完成,属性已绑定,但DOM还未生成,$ el属性还不存在
         */
        created() {
            this.getData()
        },
        /**
         * el 被新创建的 vm.$ el 替换,并挂载到实例上去之后调用该钩子。
         * 如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$ el 也在文档内。
         */
        mounted() {
        },
        // 组件方法
        methods: {
            getData() {
                request.get("/demo/getTimeLine", {
                    params: {
                        url: 'https://ent.163.com/special/00035080/virus_report_data.js',
                    }
                }).then(data => {
                    let str = data.data
                    this.timeLineList = eval(
                        '(' + str.slice(str.indexOf('(') + 1, -1) + ')'
                    ).list.slice(0, 10)
                })

            },
        },
    }
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<!--使用了scoped属性之后,父组件的style样式将不会渗透到子组件中,-->
<!--然而子组件的根节点元素会同时被设置了scoped的父css样式和设置了scoped的子css样式影响,-->
<!--这么设计的目的是父组件可以对子组件根元素进行布局。-->
<style scoped>
    .box-timeline {
        width: 500px;
        float: left;
        margin-left: 20px;
    }

    .bobao {
        height: 20px;
        font-weight: 700;
        font-size: 18px;
    }

    .time-container {
        /* width: 100%; */
        height: 400px;
        overflow: auto;
    }

    .content {
        width: 340px;
        background-color: #f4f4f4;
        border-radius: 8px;
    }

    .tit {
        font-weight: 600;
        font-size: 18px;
    }

    .detail {
        color: #999;
        margin-top: 20px;
        display: block;
        position: relative;
    }

    .detail::before {
        position: absolute;
        content: '';
        right: 200px;
        top: 3px;
        width: 12px;
        height: 12px;
        background: url('./../../images/arrow.png') no-repeat;
        background-size: 100% 100%;
    }
</style>

本来很早就写好了,发的比较晚,当自己学习了

好了,未来争取输出更多干货视文章……


📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤️ 分享👥 留言💬thanks!!!

📚愿我们奔赴在各自的热爱里!我们未来见……

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[leetcode.4]寻找两个正序数组的中位数 多思考边界

题目展示 题目要点 题目其实本身的思路非常简单&#xff0c;就是把两个数组给合并起来&#xff0c;然后寻找中位数&#xff0c;具体可以参考我们使用归并排序时候的最后一步&#xff0c;这题的难点其实在于&#xff08;1&#xff09;时间压缩到lognm&#xff08;2&#xff09;…

[附源码]Nodejs计算机毕业设计基于与协同过滤算法的竞赛项目管理Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

基于MMEngine和MMDet搭建目标跟踪框架MMTracking-1.0.0rc1-Win10

缘由&#xff1a; 1. 目标跟踪是工业检测和学术研究的基础课题&#xff0c;其pipeline通常分为视频目标检测、视频实例分割、单目标跟踪、多目标跟踪和Re-ID五类&#xff0c;同时&#xff0c;还细分为在线检测和离线检测两种任务模式。由于现阶段关于目标跟踪的教程较少&#…

机器学习 KNN算法原理

目录 一&#xff1a;KNN算法概念 二&#xff1a;KNN原理 三&#xff1a;KNN超参数 四&#xff1a;KNN算法选择 一&#xff1a;KNN算法概念 KNN(K-Nearest Neighbor)法即K最邻近法&#xff0c;最初由Cover和Hart于1968年提出&#xff0c;是最简单的机器学习算法之一 算法思路…

NNDL 作业9:分别使用numpy和pytorch实现BPTT

6-1P&#xff1a;推导RNN反向传播算法BPTT. 6-2P&#xff1a;设计简单RNN模型&#xff0c;分别用Numpy、Pytorch实现反向传播算子&#xff0c;并代入数值测试.、 forward&#xff1a; 我们知道循环卷积网络的cell的计算公式为&#xff1a; stf(UxtWst−1)\mathrm{s}_tf(…

UML学习入门

UML 举一个简单的例子&#xff0c;来看这样一副图&#xff0c;其中就包括了UML类图中的基本图示法。 首先&#xff0c;看动物矩形框&#xff0c;它代表一个类&#xff08;Class&#xff09;。类图分三层&#xff0c;第一层显示类的名称&#xff0c;如果是抽象类&#xff0c;则…

多模块之前的消息引用问题

多模块引用之前的问题目录概述需求&#xff1a;设计思路实现思路分析1.在第一个模块中调用另一个调用模块的Bean2.普通java类 如何获取另一个模块的Bean3.启用消息机制4.为什么普通java类很难调用SpringBean的&#xff1f;参考资料和推荐阅读Survive by day and develop by nig…

机器学习快速上手基础

努力是为了不平庸~ 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。 目录 一、简介与应该明确的学习方法 1、学习方法 2、简介 二、学习机器学习的优势 三、机器学习的内核 1、学习术语 2、内核 四、机器学习…

IT团队自动化端点管理解决方案—基于虹科Chef工具

企业如何简化端点管理工作流程&#xff1f; 如何解决安全事件&#xff1f;如何生成审计报告&#xff1f;如何处理大量账单&#xff1f;这些都是企业IT团队需要考虑的问题。然而&#xff0c;IT人员每天有大量的事情需要处理&#xff0c;如何自动化、标准化、及时性的处理这些问…

(最优化理论与方法)第六章无约束优化算法-第二节:梯度类算法

文章目录一&#xff1a;次梯度算法&#xff08;1&#xff09;次梯度算法结构&#xff08;2&#xff09;应用举例-LASSO问题求解二&#xff1a;牛顿法&#xff08;1&#xff09;经典牛顿法&#xff08;2&#xff09;修正牛顿法三&#xff1a;拟牛顿法&#xff08;1&#xff09;拟…

知到/智慧树——英语听说:实境主题与技能(参考答案)

目录 第一章测试 第二章测试 第三章测试 第四章测试 第五章测试 第六章测试 第七章测试 第八章测试 第九章测试 第十章测试 第一章测试 第1部分总题数: 10 1 【多选题】 (10分) What does this chapter mainly teach &#xff08; &#xff09;&#xff1f; A. T…

生成树(基础)

目录 一、生成树的相关概念 二、最小生成树的相关概念 最小生成树的性质(MST性质)&#xff1a; MST性质解释&#xff1a; 三、Prim算法&#xff08;普里姆算法&#xff09; 动态演示 关键算法&#xff1a; 完整代码&#xff1a; 四、Kruskal(克鲁斯卡尔)算法 动态演示&…

mysql主从复制架构

MySQL的主从复制架构的分布机制&#xff0c;是通过将MySQL的某一台主机(master)的数据复制到其他主机(slave)上。 在复制过程中一台主机作为主服务器&#xff0c;其他服务器则为从服务器。主服务器将更新写入到日志文件中&#xff0c;日志被从服务器的 I/O线程读取&#xff0c;…

逻辑回归 预测癌症数据

目录 一&#xff1a;加载数据 二&#xff1a;数据集划分 三&#xff1a;选择算法 四&#xff1a;网格模型 超参调优 五&#xff1a;模型预测 六&#xff1a;模型保存和使用 七&#xff1a;完整源码分享 八&#xff1a;预测与实际比对 一&#xff1a;加载数据 from sk…

C语言—变量与常量

想存储一个数据时&#xff0c;都会在内存中开辟一个空间&#xff0c;这个空间会有一个地址&#xff1b; 这个地址是一串数字&#xff0c;为了方便记忆&#xff0c;所以要对这个地址起一个名字&#xff0c;也就是变量名&#xff1b; 通过这个变量名就可以找到内存中存放这个数…

java高校学生电器报修系统ssm高校后勤报修系统小程序源码和论文

随着高校每年的扩大招生&#xff0c;学校人数越来越多&#xff0c;学校后勤报修管理的工作量也越来越繁重。使用传统的管理手段和方法&#xff0c;很难完成大量的信息分析和处理。因此&#xff0c;充分利用网络资源和信息化技术&#xff0c;建设一套基于校园网的学校后勤报修管…

fpga实操训练(uart串口)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 如果说led灯、按键、数码管这些都只能算是基础的话&#xff0c;那么学习fpga遇到的第一个门槛就是uart。要做好uart&#xff0c;首先需要了解串口的…

Thymeleaf 预处理表达式__${表达式}__之国际化使用案例

目录一. 前期准备1.1 国际化项目获取类1.2 国际化配置文件类1.3 项目配置文件1.4 国际化资源文件二. __${表达式}__预处理表达式2.1 在Thymeleaf中使用Spring的Bean2.2 通过#{}获取国际化资源2.3 预处理表达式__${表达式}__的使用三. 效果一. 前期准备 1.1 国际化项目获取类 …

linux系统中RGBLCD的基本操作和实现方法

大家好&#xff0c;今天主要来聊一聊&#xff0c;如何控制RGBLCD屏的方法。 目录 第一&#xff1a;LCD基本简介 第二&#xff1a;LCD屏的要点 第三&#xff1a;LCD屏具体配置步骤 第四&#xff1a;LCD屏具体的代码实现 第一&#xff1a;LCD基本简介 LCD液晶屏是常用的外设&…

Linux常用命令,能解决工作中99%的Linux操作问题

目录 一、ls 二、pwd 三、cd 四、touch 五、mkdir 六、rmdir&rm 七、man 八、cp 九、mv 九、cat 十、move 十一、less 十二、head 十三、tail 十四、时间 十五、cal 十六、find 十七、grep 十八、zip/unzip 十九、tar 二十、计算器 二十一、uname 二…