JavaWeb - 5 - 前端工程化

一.前后端分离开发

前后端混合开发

        缺点:沟通成本高,分工不明确,不便管理,不便维护拓展

前后端分离开发

        当前最为主流的开发模式:前后端分离

前后端分离开发中很重要的是API接口文档如:YApi:YApi是高效、易用、功能强大的api管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务)

二.前端工程化

        前端工程化:是指在企业级的前端项目开发中,把前端开发所需的工具、技术、流程、经验等进行规范化、标准化(模块化(JS、CSS)、组件化(UI结构、样式、行为)、规范化(目录结构、编码、接口)、自动化(构建、部署、测试)

2.1 环境准备

vue-cli

· 介绍:vue-cli是Vue官方提供的一个脚手架,用于快速生成一个Vue的项目模板

· Vue-cli提供了如下功能:

        · 统一的目录结构

        · 本地调试

        · 热部署(代码变动不需要再次运行)

        · 单元测试

        · 集成打包上线

· 依赖环境:NodeJS

安装NodeJS和vue-cli,我参考的是下面这篇博客:

Vue脚手架的安装(超详细篇,保姆级教程)_vue脚手架安装-CSDN博客

2.2 Vue项目简介

2.2.1 Vue项目 - 创建

· 命令行: vue create vue-project01

· 图形化界面:vue ui

创建过程参考:Day03-05. 前端工程化-Vue项目_哔哩哔哩_bilibili

2.2.2 Vue项目 - 目录结构

        基于Vue脚手架创建出来的工程,有标准的目录结构,如下:

2.2.3 Vue项目-启动

        vscode如果里面没有NPM脚本的话,右键项目文件夹,勾选npm脚本

2.2.4 Vue项目-配置端口

2.3 Vue项目开发流程

三.Vue组件库Element

Element:是饿了么团队研发的一套为开发者、设计师和产品经理准备的基于Vue2.0的桌面端组件库

组件:组成网页的部件,例如超链接、按钮、图片、表格、表单、分页条等等

官网:Element - The world's most popular Vue UI framework

3.1 快速入门

· 安装ElementUI组件库(在当前工程的目录下),在命令行执行指令:

· 引入ElementUI组件库

· 访问官网,复制组件代码,调整

3.2 常见组件

3.2.1 常见组件-表格

Table表格:用于展示多条结构类似的数据,可对数据进行排序、筛选、对比或其他自定义操作

3.2.2 常见组件-分页

Pagination分页:当数据量过多时,使用分页分解数据

3.2.3 常见组件-对话框

Dialog对话框:在保留当前页面状态的情况下,告知用户并承载相关操作

3.2.4 常见组件-表单

Form表单:由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据

<!-- src/views/element/ElementView.vue -->
<template><!-- 格式化快捷键:shift + alt + f --><!-- 学会从官网粘贴想要的组件 --><div><!-- button按钮 --><el-row><el-button>默认按钮</el-button><el-button type="primary">主要按钮</el-button><el-button type="success">成功按钮</el-button><el-button type="info">信息按钮</el-button><el-button type="warning">警告按钮</el-button><el-button type="danger">危险按钮</el-button></el-row><!-- button按钮 --><br><!-- Table表格 --><el-table :data="tableData" style="width: 100%" :row-class-name="tableRowClassName"><el-table-column prop="date" label="日期" width="180"></el-table-column><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="address" label="地址"></el-table-column></el-table><!-- Table表格 --><br><!-- Pagination分页 --><el-pagination background layout="sizes, prev, pager, next, jumper, ->, total" @size-change="handleSizeChange"@current-change="handleCurrentChange" :total="1000"></el-pagination><!-- Pagination分页 --><br><!-- Dialog对话框 --><!-- Table --><el-button type="text" @click="dialogTableVisible = true">打开嵌套表格的 Dialog</el-button><el-dialog title="收货地址" :visible.sync="dialogTableVisible"> <!--dialogTableVisible默认是false,点击的时候变成true --><el-table :data="tableData"><el-table-column property="date" label="日期" width="150"></el-table-column><el-table-column property="name" label="姓名" width="200"></el-table-column><el-table-column property="address" label="地址"></el-table-column></el-table></el-dialog><!-- Form --><el-button type="text" @click="dialogFormVisible = true">打开嵌套表单的 Dialog</el-button><el-dialog title="收货地址" :visible.sync="dialogFormVisible"><!-- Form表单 --><el-form ref="form" :model="form" label-width="80px"><el-form-item label="活动名称"><el-input v-model="form.name"></el-input></el-form-item><el-form-item label="活动区域"><el-select v-model="form.region" placeholder="请选择活动区域"><el-option label="区域一" value="shanghai"></el-option><el-option label="区域二" value="beijing"></el-option></el-select></el-form-item><el-form-item label="活动时间"><el-col :span="11"><el-date-picker type="date" placeholder="选择日期" v-model="form.date1"style="width: 100%;"></el-date-picker></el-col><el-col class="line" :span="2">-</el-col><el-col :span="11"><el-time-picker placeholder="选择时间" v-model="form.date2" style="width: 100%;"></el-time-picker></el-col></el-form-item><el-form-item label="即时配送"><el-switch v-model="form.delivery"></el-switch></el-form-item><el-form-item label="活动性质"><el-checkbox-group v-model="form.type"><el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox><el-checkbox label="地推活动" name="type"></el-checkbox><el-checkbox label="线下主题活动" name="type"></el-checkbox><el-checkbox label="单纯品牌曝光" name="type"></el-checkbox></el-checkbox-group></el-form-item><el-form-item label="特殊资源"><el-radio-group v-model="form.resource"><el-radio label="线上品牌商赞助"></el-radio><el-radio label="线下场地免费"></el-radio></el-radio-group></el-form-item><el-form-item label="活动形式"><el-input type="textarea" v-model="form.desc"></el-input></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">提交</el-button><el-button>取消</el-button></el-form-item></el-form><!-- Form表单 --></el-dialog><!-- Dialog对话框 --><br></div>
</template><script>
export default {methods: {tableRowClassName({ rowIndex }) {if (rowIndex === 1) {return 'warning-row';} else if (rowIndex === 3) {return 'success-row';}return '';},handleSizeChange(val) {alert(`每页 ${val} 条`);},handleCurrentChange(val) {alert(`当前页: ${val}`);},onSubmit() {alert('submit!');alert(JSON.stringify(this.form));}},data() {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄',}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄',}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄'}],dialogTableVisible: false,dialogFormVisible: false,form: {name: '',region: '',date1: '',date2: '',delivery: false,type: [],resource: '',desc: ''},formLabelWidth: '120px'}},
}
</script><style>
.el-table .warning-row {background: oldlace;
}.el-table .success-row {background: #f0f9eb;
}
</style><!-- src/App.vue -->
<template><div><!-- <h1>{{message}}</h1> --><element-view></element-view></div>
</template><script>
import ElementView from './views/element/ElementView.vue'
export default {components: { ElementView },data(){return{message: "Hello Vue"}},methods: {},
}
</script><style></style>

3.3 案例

<!-- src\views\tlias\EmpView.vue -->
<template><div><el-container style="height: 500px; border: 1px solid #eee"><el-header> tlias 智能学习辅助系统</el-header><el-container><el-aside width="200px" style="background-color: rgb(238, 241, 246)"><el-menu :default-openeds="['1', '3']"><el-submenu index="1"><template slot="title"><i class="el-icon-message"></i>系统信息管理</template><el-menu-item index="1-1">部门管理</el-menu-item><el-menu-item index="1-2">员工管理</el-menu-item></el-submenu></el-menu></el-aside><el-main><!-- 表单 --><el-form :inline="true" :model="searchForm" class="demo-form-inline"><el-form-item label="姓名"><el-input v-model="searchForm.name" placeholder="姓名"></el-input></el-form-item><el-form-item label="性别"><el-select v-model="searchForm.sex" placeholder="性别"><el-option label="男" value="1"></el-option><el-option label="女" value="2"></el-option></el-select></el-form-item><el-form-item label="入职时间"><!-- 日期选择器 --><el-date-picker v-model="searchForm.entryDate" type="daterange" range-separator="至"start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">查询</el-button></el-form-item></el-form><el-table :data="tableData" border><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="image" label="图像" width="180"><template slot-scope="scope"><img :src="scope.row.image" width="100px" height="100px"></template></el-table-column><el-table-column label="性别" width="140"><template slot-scope="scope">{{ scope.row.gender == 1 ? "男" : "女" }}</template></el-table-column><el-table-column prop="job" label="职位" width="140"></el-table-column><el-table-column prop="entrydate" label="入职日期" width="140"></el-table-column><el-table-column prop="updatetime" label="最后操作时间" width="140"></el-table-column><el-table-column label="操作" width="140"><template><el-button type="text" size="small">查看</el-button><el-button type="text" size="small">编辑</el-button></template></el-table-column></el-table><!-- 分页条 --><el-pagination background layout="sizes, prev, pager, next, jumper, ->, total"@size-change="handleSizeChange" @current-change="handleCurrentChange":total="1000"></el-pagination></el-main></el-container></el-container></div>
</template><script>import axios from 'axios';export default {data() {return {tableData: [], // https://mock.apifox.cn/m1/3128855-0-default/emp/listsearchForm: {name: "",gender: "",entryDate: []}}},methods: {handleSizeChange(val) {alert(`每页 ${val} 条`);},handleCurrentChange(val) {alert(`当前页: ${val}`);},onSubmit() {alert('submit!');}},mounted() {//发送异步请求axios.get("https://mock.apifox.cn/m1/3128855-0-default/emp/list").then((result) => {this.tableData = result.data.data;});}
}
</script><style>
.el-header {background-color: #B3C0D1;color: #333;text-align: center;line-height: 60px;
}.el-aside {background-color: #D3DCE6;color: #333;text-align: center;line-height: 200px;
}.el-main {background-color: #E9EEF3;/* color: #333;text-align: center;line-height: 160px; */
}
</style><!-- src/App.vue -->
<template><div><!-- <h1>{{message}}</h1> --><!-- <element-view></element-view> --><!-- 员工管理 --><emp-view></emp-view></div>
</template><script>
import EmpView from './views/tlias/EmpView.vue'
// import ElementView from './views/element/ElementView.vue'
export default {components: { EmpView },// components: { ElementView },data(){return{message: "Hello Vue"}},methods: {},
}
</script><style></style>

四.Vue路由

前端路由:URL中的hash(#号)与组件之间的对应关系

Vue Router

· 介绍:Vue Router是Vue的官方路由

· 组成:

        · VueRouter:路由器类,根据路由请求在路由视图中动态渲染选中的组件

        · <router-link>:请求链接组件,浏览器会解析成<a>

        · <router-view>:动态视图组件,用来渲染展示与路由路径对应的组件

Vue路由

· 安装(创建Vue项目时已经选择):npm install vue-router@3.5.1

· 定义路由

        在index.js中定义路由,将页面中需要设置跳转的地方使用<router-link>,在App.vue中添加<router-view>

五.打包部署

5.1 打包

5.2 nginx

介绍:Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,在各大型互联网公司都有非常广泛的应用

官网:nginx news

5.3 部署

        部署后访问:http://localhost.更改后的端口号

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

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

相关文章

1--SpringBoot外卖项目介绍及环境搭建 详解

目录 软件开发整体流程 软件开发流程 角色分工 软件环境 苍穹外卖项目介绍 项目介绍 产品原型 技术选型 开发环境搭建 前端环境搭建 后端环境搭建 完善登录功能 导入接口文档 Swagger 介绍 使用方式 常用注解 软件开发整体流程 软件开发流程 需求分析&#x…

JavaWeb的Filter详解

过滤器Filter 什么是Filter&#xff1f; 依据字面上的中文意思为过滤器。Filter的作用 当用户的请求到达指定的URL之前&#xff0c;可以借助Filter来改变这些请求的内容&#xff1b;同样地&#xff0c;当响应结果到达客户端之前&#xff0c;可以使用Filter修改输出的内容。什么…

基于springboot的驾校管理系统的设计与实现 (含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的驾校管理系统4拥有三种角色&#xff0c;分别为管理员、教练、学员。 管理员&#xff1a;学员/教练管理、报名管理、车辆管理、教练分配管理、课程安排管理、考勤打卡管理…

数字化转型的理论框架对比:从多维视角指导企业成功变革对比DPBOKIT4ITCOBITTOGAF

数字化转型的多维框架解析 在数字化时代&#xff0c;企业如何有效实现数字化转型已成为其生存和发展的关键问题。然而&#xff0c;市场上关于数字化管理的各种框架和理论并存&#xff0c;企业需要根据自身的需求选择最适合的指导路径。本文将通过对几个核心理论框架的对比&…

【随手笔记】使用J-LINK读写芯片内存数据

第一种使用JLINK.exe 1. 打开j-link.exe 2.输入【usb】 3. 连接芯片 输入【connect】输入芯片型号【STM32L071RB】输入连接方式 【S】 使用SWD连接方式输入连接速率 【4000】连接成功 4. 输入【&#xff1f;】查看指令提示 5. 读写指令 Mem Mem [<Zone>…

C++:分苹果【排列组合】

描述 把M个同样的苹果放到N个同样的盘子里&#xff0c;允许有的盘子空着不放&#xff0c;问共有多少种不同的分法&#xff1f;&#xff08;用K表示&#xff09;&#xff0c;5&#xff0c;1&#xff0c;1和1&#xff0c;5&#xff0c;1是同一种分法。 输入描述 两个整数M和N&…

数据仓库建模方法论 :ER模型(三范式)

ER模型之三范式&#xff1a; 其实范式有很多&#xff0c;这一系列范式就是指在设计关系型数据库时&#xff0c;需要遵从的不同的规范。关系型数据库的范式一共有六种&#xff0c;分别是第一范式&#xff08;1NF&#xff09;、第二范式&#xff08;2NF&#xff09;、第三范式&am…

【变化检测】基于ChangeStar建筑物(LEVIR-CD)变化检测实战及ONNX推理

主要内容如下&#xff1a; 1、LEVIR-CD数据集介绍及下载 2、运行环境安装 3、ChangeStar模型训练与预测 4、Onnx运行及可视化 运行环境&#xff1a;Python3.8&#xff0c;torch1.12.0cu113&#xff0c;onnxruntime-gpu1.12.0 likyoo变化检测源码&#xff1a;https://github.c…

雷老师使用指南

Raymond ——原微软10年资深Office产品经理、微软人才顾问。全网50万粉丝《雷老师讲AI》主理人。现任知场科技CEO、企业培训师、职业生涯咨询师、启迪之星创业导师、个人IP孵化教练。 / 1. 雷老师是谁&#xff1f; / 我的英文名叫Raymond&#xff0c;在微软大家都叫我雷曼…

好物分享之一个神级网络扫描工具,零基础入门到精通,收藏这一篇就够了

WatchYourLAN 是一个局域网&#xff08;LAN&#xff09;监控工具。它通过扫描局域网内的设备&#xff0c;提供设备信息和网络活动的可视化界面。这有助于网络管理员和用户更好地了解他们的网络环境。 工作原理 发现新主机时发送通知 监控主机在线/离线历史记录 保存网络中所有…

【多线程】CAS的原理及应用,看这篇文章就够啦

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 一、CAS概述 CAS&#xff08;Compare and Swap&#xff09;&#xff0c;中文译为 “比较并交换” &#xff0c;是一种无锁算法中常用的原子操作。CAS通常用于实现线程之间的同…

深度学习-从零基础快速入门到项目实践,这本书上市了!!!

此书地址&#xff1a; 《【2024新书】深度学习 从零基础快速入门到项目实践 文青山 跟我一起学人工智能 机器学习算法原理代码实现教程 深度学习项目分析 深度学习 从零基础快速入门到项目实践》【摘要 书评 试读】- 京东图书 除深度学习外我还写了一本软件测试书。我大概是国…

高效编程的利器 Jupyter Notebook

目录 前言1. Jupyter Notebook简介1.1 功能特点1.2 使用场景 2. 不同编程工具的对比与效率提升2.1 VS Code&#xff1a;灵活且轻量的代码编辑器2.2 PyCharm&#xff1a;面向专业开发者的集成开发环境2.3 Git&#xff1a;高效协作的版本控制工具2.4 Jupyter Notebook 和 VS Code…

idea中.git文件夹存在但是没有git功能列表

1.问题&#xff1a; 该项目中已经将.git文件夹置入了&#xff0c;但是idea中却没有git相关的功能列表&#xff0c;如图&#xff1a; 2.解决办法&#xff1a; 在【文件】-【设置】-【版本控制】-【目录映射】中添加目录映射应用就好了 &#xff08;【File】 -> 【S…

使用 Elasticsearch Reindex API 迁移数据

使用 Elasticsearch Reindex API 迁移数据 在 Elasticsearch 中&#xff0c;随着需求的变化&#xff0c;可能需要对索引进行重建或更新。这通常涉及创建新索引、迁移数据等步骤。本文介绍如何使用 Reindex API 将旧索引中的数据迁移到新索引中 一、步骤概述 创建新索引&#…

LEAN 赋型唯一性(Unique Typing)之 并行 κ 简化 (Parallel κ reduction)>>ₖ

基于 κ 简化 &#xff08;κ reduction&#xff09; 的概念&#xff0c;引入了并行简化&#xff08;Parallel Reduction&#xff09;的概念&#xff0c;记 >>&#xff0c;而 并行K简化&#xff08;Parallel K Reduction&#xff09;记为 >>ₖ 。直观的意思是&…

Windows下利用MSYS2和VS的nmake编译nginx源码

目录 一、使用说明 二、安装软件 2.1 下载依赖库 2.3 下载并安装 StrawberryPerl 2.4 下载并安装 MSYS 2 2.5 nginx源代码下载 三、编译配置 3.1 设置NGX_MSVC_VER 3.2 配置 Makefile 3.3 编译代码 3.4 整理Nginx发布环境 四、错误处理 一、使用说明 本文章主要记…

【正点原子K210连载】第四十章 YOLO2人手检测实验摘自【正点原子】DNK210使用指南-CanMV版指南

第四十章 YOLO2人手检测实验 在上一章节中&#xff0c;介绍了利用maix.KPU模块实现YOLO2的人脸检测&#xff0c;本章将继续介绍利用maix.KPU模块实现YOLO2的人手检测。通过本章的学习&#xff0c;读者将学习到YOLO2网络的人手检测应用在CanMV上的实现。 本章分为如下几个小节&…

RocketMQ核心编程模型与最佳实践

目录 一、RocketMQ的消息模型 1、RocketMQ客户端基本流程 2、消息确认机制 3、广播消息 4、顺序消息机制 5、延迟消息 6、批量消息 7、过滤消息 8、事务消息 9、ACL权限控制机制 二、SpringBoot整合RocketMQ 1、快速实战 2、如何处理各种消息类型 3、实现原理 三…

周末愉快!——周复盘

加班的晚上有一个美梦&#xff01; 周末愉快简单复盘结尾 精华&#xff1a; 在这个信息爆炸的时代&#xff0c;我们的大脑每天都被无数的数据和刺激充斥&#xff0c;以至于我们常常感到应接不暇。然而&#xff0c;正如古人所言&#xff1a;“不飞则已&#xff0c;一飞冲天”&am…