《程序猿入职必会(2) · 搭建具备前端展示效果的 Vue》

news2024/9/23 6:25:44

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

    • 写在前面的话
    • 搭建 Vue 项目
      • 项目创建
      • 项目目录
      • 启动项目
    • 提升 Vue 项目
      • 整合 Axios
      • 整合 ElementUI
    • 总结陈词

CSDN.gif

写在前面的话

书接上回,本系列博文打算指引职场程序猿新人,掌握在企业刚入职时所需要的成长技能,期望可以帮助到大家,略尽绵薄之力。
上篇《程序猿入职必会(1) · 搭建拥有数据交互的 SpringBoot 》文章,介绍了需求背景和后端搭建,学完后,相信你已获得一个具备数据交互能力的后端服务。
那按照传统流程,接下来要开始搞前端了,开始!


搭建 Vue 项目

Tips:这里也可以抽空阅读一下博主之前的文章,《程序猿学会 Vue · 基础与实战篇》,相信可以有所帮助。

项目创建

创建 Vue 项目方式很多,可以先选用官网推荐的 create-vue 创建,详见官网。
操作很简单,输入下面的指令后,按步骤一步步执行即可。
npm create vue@latest
image.png


项目目录

image.png
如图所示,VueCli创建的项目,目录说明如下:

  • node_modules目录:用来存放当前项目中使用的 js 依赖,类似于 Maven 的本地 jar 仓库
  • public:静态资源目录,包含主页入口,图标等
  • src:开发主要关注的内容,assets是静态资源、components是组件,main.js是主页入口,App是主组件
  • vue.config.js:Vue CLI配置文件(可选)
  • package.json:项目依赖配置,类似 Maven 的 pom.xml

实际开发中,主要关注 src 和 package.json即可,其他短期内暂时不需要关注。


启动项目

命令行直接输入:npm run dev
看到如下内容:
image.png
浏览器访问:http://localhost:5173/,效果如下:
image.png


提升 Vue 项目

通过上面步骤,你已经得到了一个前端Vue项目(又得到了!),但是你发现啥也干不了啊,需求怎么做啊?我们是不是要先打通和后端的交互?
没错,接下来就是想办法调到后端接口,那你搜了一下,可以采用 Fetch、Axios、Ajax 等等技术方案。
这里选用流行的 Axios,没什么好说的,直接开始整合。

整合 Axios

【技术简介】
Axios 是基于 Promise 的网络请求库, 它可以发送http请求并接收服务器返回的响应数据。
Axios 返回的是一个 Promise 对象。
Axios 不仅可以用于浏览器,也可以用于 Node.js,而 Fetch 主要用于浏览器。

Tips:早期的前端开发,可以理解为增强版的Ajax。

【整合步骤】
Step1、安装 Axios

npm install axios

Step2、引入 Axios,在 main.js 操作

import {createApp} from 'vue'
import App from './App.vue'

const app = createApp(App)

// 引入 Axios
import axios from './axios';

// 全局挂载 axios 实例
app.config.globalProperties.$axios = axios;

// 挂载 app
app.mount('#app');

Step3、到此,其实已经整合完毕了,可以使用 Axios
随手写一个测试的vue页面,内容如下,很简单对吧。
就是请求一下之前写的教师查询接口,获取一下数据展示在页面。

<template>
  <div>
    <div v-if="data">{{ data }}</div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        data: null,
      };
    },
    created() {
      let that = this
      that.$axios.get('/zyTeacherInfo')
        .then(function (response) {
          console.log(response.data);
          that.data = response.data;
        })
        .catch(function (error) {
          console.log(error);
        });
    },
  };
</script>

很简单是吧,可惜,发现直接报错了!如下所示:
image.png
这个错误不要慌,很普遍的跨域问题,感兴趣的搜一下。
这边直接贴解决方案,需要把视角切回上一章节的后端项目,添加一下跨域配置。
具体做法:
1、新建一个SpringMVC的定制配置类,详细内容可以参考《学会 SpringBoot · 定制 SpringMVC》;
2、实现addCorsMappings接口,添加跨域配置;
3、重启服务。

@Configuration
@Slf4j
public class CustomConfig implements WebMvcConfigurer {

    /**
     * 配置跨域拦截器
     * @param registry 跨域拦截器
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOriginPatterns("*")
                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedHeaders("*");
    }
}

前端再次测试,OK,接口调用正常,返回信息如下:
image.png
你肯定要说,这是什么鬼,这么丑,能交差吗?
不要怕,这个还不够,路漫漫其修远兮,吾将上下而求索。


整合 ElementUI

前面提到内容太丑的问题,如果你只是一个刚毕业的Java程序猿,肯定要骂爹了,“我拿什么美化,我又不是前端切图仔!”。
嗯,好在,你可以借助外力,很多精美UI库和组件库等着你。
这里以 ElementUI 为例展开介绍。

【技术简介】
ElementUI 是饿了么开源的⼀套基于 Vue2 的经典UI库,针对Vue3,升级成为了ElementPlus。熟悉 ElementPlus
库,不但可以节省⼤量前端项⽬的开发时间,同时也是深⼊了解 Vue3 复杂组件开发的很好途径。
参考:Element Plus 官网

Tips:也可以基于 ElementUI 扩展了自己公司的 UI 组件库。

【安装使用】
Step1、安装 ElementPlus

# 在 npm 5.0.0 版本及以上,即使你不加 --save 参数,安装的包也会自动保存到 package.json 文件中。
npm install element-plus --save

Step2、引入 ElementPlus,在 main.js 操作

Tips:这里是全局引入方式,也可以按页面局部引入,例如:import { ElButton }from’element-plus’;

import { createApp } from 'vue'
import App from './App.vue'

// 引入 ElementPlus
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

const app = createApp(App)

// 注册 ElementPlus
app.use(ElementPlus)

app.mount('#app')

Step3、页面或组件直接使用

<el-select v-model="selected" placeholder="请选择">
  <el-option label="选项1" value="1"></el-option>
  <el-option label="选项2" value="2"></el-option>
</el-select>

到此,整合完毕了,那用什么组件开发呢?给一个下拉框示例干嘛?
废话,当然是表格控件,软件行业的一句俗话:”面试造火箭,上班拧螺丝“。
后续,绝大多数程序猿,可能上班就在和表格、表单、下拉框等组件的交互中度过,这就是拧螺丝的一种了。
废话不多说,上Demo:

<template>
  <div class="table-container">
    <el-table :data="tableData" :row-class-name="rowClassName" class="custom-table">
      <el-table-column prop="teaCode" label="教师编码" width="180"></el-table-column>
      <el-table-column prop="teaName" label="教师名称" width="180"></el-table-column>
      <el-table-column prop="createdTime" label="登记时间"></el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        {date: '2024-07-23', name: 'John Doe', address: '123 Main St'},
        {date: '2024-07-24', name: 'Jane Smith', address: '456 Maple Ave'},
      ],
      data: null,
    };
  },
  created() {
    let that = this
    that.$axios.get('/zyTeacherInfo')
        .then(function (response) {
          console.log(response.data);
          that.tableData = response.data;
        })
        .catch(function (error) {
          console.log(error);
        });
  },
  methods: {
    async fetchData() {

    },

    rowClassName({rowIndex}) {
      return rowIndex % 2 === 0 ? 'warning-row' : 'success-row';
    },
  },
};
</script>

<style>
.el-table .warning-row {
  --el-table-tr-bg-color: var(--el-color-warning-light-9);
}

.el-table .success-row {
  --el-table-tr-bg-color: var(--el-color-success-light-9);
}

.table-container {
  display: flex;
  justify-content: center;
  align-items: center;
}

.custom-table {
  width: 600px; /* 设置表格宽度 */
}

</style>

效果如下,还可以:
image.png
简单说明一下步骤:
1、前往ElementPlus官网,找到合适的组件,复制代码;
2、在本地前端的Vue页面,先用模拟数据跑起来;
3、将数据和属性切换为真实的、动态的数据;

Tips:常规后端与前端配合也是这个步骤,不过也可能前后端都是你哦,兄弟。


总结陈词

篇幅所限,这篇文章先介绍这些内容,学完这篇,你已经搭建了前端和后端项目,并且完成了前后端数据交互,也用组件UI库,美化了样式。
但离需求实现,还差很多接口和逻辑,不过我们不慌,正所谓:”万丈高楼平地起“、”千里之行始于足下“,啥啥啥的,加油。
💗 如果觉得内容还可以,麻烦点个关注不迷路,您的鼓励是我创作的动力。

CSDN_END.gif

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

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

相关文章

华为OD2024D卷机试题汇总,含D量50%+,按算法分类刷题,事半功倍

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、链表5、栈6、滑动窗口7、二叉树8、并查集9、矩阵 三、算法1、基础算法① 贪心思维② 二分查…

Graph Guided Transformer论文精读

摘要 抛出问题&#xff1a;基于深度学习的框架在将平衡局部空间结构信息的时候对于区域信息的特征建模能力会下降&#xff01; 紧接着提出一个GT&#xff08;Graph–guided transformer&#xff09;模型&#xff0c;整个网络的框架为&#xff1a;首先使用卷积块获取像素级别的…

开源项目:推动经济与科技发展的新引擎

文章目录 每日一句正能量前言开源项目的发展趋势开源项目的发展趋势开源社区的活跃度开源项目在技术创新中的作用结论 参与开源的经验分享如何选择开源项目如何贡献代码如何与开源社区合作个人品牌与职业发展贡献与成就感 开源项目的挑战维护难度版权问题社区管理技术债务安全问…

理解进程status的二进制位表示及进程等待(是什么,为什么,怎么办)

信号编号&#xff1a;低7位 状态编号&#xff1a;次低8位 1.子进程退出后会变为僵尸进程&#xff0c;将退出结果写入自身的task_struct结构体中 2.wait/waitpid是一个系统调用->OS可以读取子进程的task_struct 1.为什么要进行进程等待&#xff1f; 1.将子进程&#xff…

Vatee万腾平台:智慧金融的创新引擎,驱动金融服务升级

在数字化浪潮席卷全球的今天&#xff0c;金融行业正经历着前所未有的变革与升级。Vatee万腾平台&#xff0c;作为智慧金融领域的创新先锋&#xff0c;正以其独特的技术优势、前瞻的战略布局和卓越的服务能力&#xff0c;成为推动金融服务升级的重要引擎。 智慧金融&#xff1a;…

上海联联充电互联互通充电系统嘎嘎快充云快充旭电通池续特来电等等免费对接

1、定时将我方订单信息推送到联联监管 2、实现联联充电Pro使用我方设备充电 3、使用我方小程序开启快电、特来电、星星充电、新电途、石化养车等等

资源调度的艺术:大规模爬虫管理的优化策略

摘要 本文深入探讨了在处理大规模数据抓取项目时&#xff0c;如何通过优化资源调度策略来提升爬虫管理的效率与稳定性。从技术选型到策略实施&#xff0c;揭示了优化的核心技巧&#xff0c;助力企业与开发者高效驾驭大数据采集的挑战。 正文 在互联网信息爆炸的时代&#xf…

iOS ------ weak的基本原理

1.weak的基本概念 weak弱引用&#xff0c;所引用的对象的引用计数不会加一&#xff0c;引用对象被释放的时候会自动设置为nil多用于解决对象间的相互引用造成内存泄露的循环引用的问题 2.实现原理 Person *object [[Person alloc] init]; id __weak objc object;Runtime维…

《程序猿学会 Vue · 基础与实战篇》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

Linux环境下MongoDB安装与主从集群,高可用集群配置教程

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

VMware 安装完,设备管理器中没有虚拟网卡(vmnet0、wmnet1、vmnet8) / 虚拟网络编辑器中没有桥接模式

问题&#xff1a;VMware 安装完&#xff0c;设备管理器中没有虚拟网卡(vmnet0、wmnet1、vmnet8) / 虚拟网络编辑器中没有桥接模式 1、确认 Device Install Service 和 Device Setup Manager 没有被禁用 Device Install Service 和 Device Setup Manager是 Windows 操作系统中…

C# 2.数组

1.定义整形数组&#xff0c;指定数组长度 string[] s1 new string[3]; byte[] bs new byte[3]; 数组的索引值从0开始&#xff0c;3个元素索引值为0&#xff0c;1,2…… 2.添加元素&#xff1a;数组【索引值】值 i1[0] 3;// 给索引值位0位置添加一个3 3 i1[0] 取出指定位置的…

【LeetCode:3098. 求出所有子序列的能量和 + 记忆化缓存】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

JUC-synchorized与锁原理、锁的升级与膨胀

syn-ed 是一个可重入、不公平的重量级锁&#xff1b;synchronized使用对象锁保证了临界区代码的原子性&#xff0c;无论使用synchorized锁的是代码块还是方法&#xff0c;其本质都是锁住一个对象。 同步代码块&#xff0c;锁住的是括号里的对象同步方法 普通方法&#xff0c;…

手写文件系统一条龙篇

哈喽&#xff0c;我是子牙老师。这篇文章聊聊文件系统是怎么写出来的&#xff0c;看完&#xff0c;你就可以自己去写文件系统了。本文以Linux的EXT系列文件系统为例进行讲解&#xff0c;理解了&#xff0c;其他的文件系统你就可以自行研究了&#xff0c;差不多的东西 理解了本…

第二证券:市场估值依然处于较低区域

结合风格板块、一级工作预喜情况与工作中预喜崎岖较大的企业体现看&#xff0c;估量2024年上半年中下游工作获利改善势头向好。其中&#xff0c;获益于客运量的上升&#xff0c;交通运输工作中大型蓝筹公司盈余才干改善。TMT领域中电子及通讯工作成果上升崎岖较大&#xff0c;工…

微服务分布式事务

1、分布式事务是什么&#xff1f; 微服务架构中的分布式事务是指在多个服务实例之间保持数据一致性的机制。由于微服务通常涉及将业务逻辑拆分成独立的服务&#xff0c;每个服务可能有自己的数据库&#xff0c;因此当一个业务操作需要跨多个服务进行时&#xff0c;确保所有服务…

小白速通 Spring 之 Annotation 篇

Annotation 注解 Service public class MessageServiceImpl implements MessageService{public String getMessage() {return "Hello World!";}} 本质上来说 Annotation(注解)是 Java 推出的一种注释机制,后面我们统一叫 Annotation&#xff0c;和普通的注释有个显…

Python设计模式:巧用元类创建单例模式!

✨ 内容&#xff1a; 今天我们来探讨一个高级且实用的Python概念——元类&#xff08;Metaclasses&#xff09;。元类是创建类的类&#xff0c;它们可以用来控制类的行为。通过本次练习&#xff0c;我们将学习如何使用元类来实现单例模式&#xff0c;确保某个类在整个程序中只…

python-首字母移位(PythonTip)

[题目描述] 编写一个程序&#xff0c;将句子中每个单词的首字母移位到下一个单词。定义函数shift_first_letter()&#xff0c;参数为sentence&#xff08;字符串&#xff09;。在函数内&#xff0c;将句子中每个单词的首字母移位到下一个单词。最后一个单词的首字母移位到句子的…