我是跟着B栈上面一个老师学的,因为我也自己想学习的方向是后端嘛,想对前端有个更多的了解,然后就跟着再做一个项目,视频地址
git上拉取本项目:https://gitee.com/zgg/sprotplay.git
我们创建的项目如下
得到如下的一个格式有,渲染流程如下
其实就我们的App.vue渲染到我们的index.html(我们的项目只有一个app的一个id)
整体上做如下修改(我们需要的资源在main.js里面导入)
总体的过程呢就是如下的
首先我们在components下面创建我们的组件然后在router下书写路由然后其他的就后面学习到了再总结 二、开发我们的登录组件 (一)开发一个组件的大致流程 在我们components下面创建login.vue【这里要注意的就是在template里面一定要注意的是要有div标签】第二步做我们的路由【因为我们的登录页面是需要重定向的,所以各位可以参考】
在App.vue里面渲染
好啦到这里我们就OK了,解析来正式的开发我们的登录页面
(二)开发我们全局样式的流程
https://element.eleme.cn/#/zh-CN/component/form
选一个自己要开发的样式复制框选内容
在登录组件里面写如下
提交按钮
(2)处理登录表单的数据绑定
在没有如下的数据绑定你是无法进行访问的
去看官网然后跟着官网改变
那假设我又不想这个图标,怎么办
如果你还是不喜欢,那就有我们如下的:http://www.kaotop.com/file/tupian/20220528/logo.png" alt> </div> <!-- 表单区域 --> <el-form ref="loginFormRef" :model="loginForm" class="login_form" label-width="80px"> <!-- 用户名 --> <el-form-item label="活动名称"> <el-input v-model="loginForm.username" prefix-icon="el-icon-search"></el-input> </el-form-item> <!-- 密码 --> <el-form-item label="活动名称"> <el-input v-model="loginForm.password" prefix-icon="el-icon-search"></el-input> </el-form-item> <!--按钮--> <el-form-item class="btns"> <el-button type="primary" >提交</el-button> <el-button type="success" >重置</el-button> </el-form-item> </el-form> </div> </div> </template> <script> export default { //对数据进行绑定 data() { return { loginForm:{ username:"username", password:"password" } } } } </script> <style lang="less" scoped> .login_container{ background-color:#2b4b6b; height:100%; } .login_box { width: 450px; height: 300px; background-color: #fff; border-radius: 3px;// 圆角 position: absolute;// 绝对定位 left: 50%; top: 50%; transform: translate(-50%, -50%);// 根据自己位置 以自己为长度位移 // 头像框 .avatar_box { width: 130px; height: 130px; border: 1px solid #eee; border-radius: 50%; // 加圆角 padding: 10px; box-shadow: 0 0 10px #ddd;// 盒子阴影 position: absolute; left: 50%; transform: translate(-50%, -50%); background-color: #0ee; img { width: 100%; height: 100%; border-radius: 50%; // 加圆角 background-color: #eee; } } .btns { display: flex;// d性布局 justify-content: flex-end; // 尾部对齐 } .login_form { position: absolute; bottom: 0%; width: 100%; padding: 0 10px; box-sizing: border-box;// 设置边框 } } </style> (5)login效验
我们的用户名和密码是仅仅是个样式而已,并没有能进行效验的能力,所以现在要进行开发,有效验的规则。
答案就是Vue的双向绑定的原因(一系列的 *** 作就OK了,它内部直接进行验证)
(6)完成登录和重置事件
我们在点击登录或者重置按钮上面反应都没有,开发了什么哦,要想有反应就得必须axios登场了。
首先导入axios并挂在到http上编写重置方法(也就是事件)
处理登录事件
上图记录调试一下的内容,然后在浏览器就可以
像我们的登录事件都是这样编写的,这里会有一个请求,然后我们把后端返回来的数据进行处理展示就OK了,大致是这样的逻辑。
比如再演示
(7)处理登录事件的详细处理
原因是我们的await【这个await关键字就是要对我们返回来的数据进行解析】关键字必须配合async关键字一起使用
真正的登录逻辑应该如下开发
当然实际的开发不会是返回OK,而是返回一个状态码,你对状态码进行判读。
完成跳转(应该是跳转到home页面)
(8)开发到这里的一个总结
虽然咱Element ui这个组件官网上面都有,但是咱还是理解一下好一点。
我们实现网络:是根据axios进行,首先要配置前端和后端共同的端口号,前端配置如下:axios.defaults.baseURL = "http://localhost:8083"
,而后端则要在application.yaml或者application.properties里面配置端口号,然后前端的请求就可以通过,如这样的$http.post("test")
请求对后端要数据我们不同组件时间的跳转则要进行如下的设置:$router.push({path:"/home"});
需要的组件都是去Element ui上面去找。
2、登录过程(JSON的使用)
经过上面的讲解,我们已经知道后端返回给咱们的是啥了,咱们可以拿到这个,如何现在可以做相应的处理了。
(1)登录过程对于我们后端的考虑假设如下是咱们的登录路径test,然后返回给前端一个字符串类型,是不行的,所以咱们得思考,用Http常用的编码,200表示成功,404表示错误什么的,现在这样思考。其实在我们后端开发人员看来这个是很好处理的,就应该返回一个JSON格式的对象,给前端。所以安排如下
后端导入需要使用JSON的依赖<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
看咱们后台的Controller层和DAO层(这里没有分更多的层)(2)然后修改前端 (3)测试
为什么能展示就是因为我们有了await关键字给我解析了
各位有什么不懂的,可以私信我。
既然后端把user的信息反给我们了,那我就做一个保存,然后那样的话,在后面的什么主页面上都有很多 *** 作。
它相当于在全局就有了我们的这个user的数据了
为什么有window.router.clear()方法,那是因为我要是下登录的话,那我们浏览器的cookie也要消除。
现在咱们的主页面里面太丑了,接下来着手开发。
<el-container>
<el-header>Header</el-header>
<el-container>
<el-aside width="200px">Aside</el-aside>
<el-main>Main</el-main>
</el-container>
</el-container>
(2)对之前的Home页面做修改
在这个里面不用提供div标签
<template>
<!-- 引入container布局 -->
<el-container>
<!-- 头部 -->
<el-header>
<el-button type="info" @click="logout()">退出登录</el-button>
</el-header>
<!-- 主体 -->
<el-container>
<!-- 侧边栏 -->
<el-aside width="200px">Aside</el-aside>
<!-- 主体内容 -->
<el-main>Main</el-main>
</el-container>
</el-container>
</template>
可以先复制我们的样式,到后面我再细入的开发
<template>
<!-- 引入container布局 -->
<el-container class="home-container">
<!-- 头部 -->
<el-header>
<el-button type="info" @click="logout()">退出登录</el-button>
</el-header>
<!-- 主体 -->
<el-container>
<!-- 侧边栏 -->
<el-aside width="200px">Aside</el-aside>
<!-- 主体内容 -->
<el-main>Main</el-main>
</el-container>
</el-container>
</template>
<script>
export default {
methods: {
logout(){
window.sessionStorage.clear();
this.$router.push({path:"/login"});
}
}
}
</script>
<style scoped>
.el-header {
background-color: #373d41;
display: flex;
justify-content: space-between; /**左右贴边 */
padding-left: 0%; /*左边界 */
color: #fff;
font-size: 20px;
>div{
isplay: flex;
align-items: center;
span{
margin-left: 15px;
}
}
}
.el-aside {
background-color: #333744;
.el-menu{
border-right: none;/*// 对其右边框 */
}
}
.el-main {
background-color: #eaedf1;
}
.home-container {
height: 100%;
}
.logo_img {
width: 20%;
height: 100%;
}
.iconfont{
margin-right: 10px;
}
.toggle-button{
background-color:#4A5064;
font-size: 10px;
line-height: 24px;
color:#fff;
text-align: center;
letter-spacing: 0.2em;
cursor: pointer;/* 显示鼠标指针为:小手 */
}
</style>
分析一下我们还差什么
完成图标的设置
虽然说是很丑,但是咱要理解它的业务逻辑就OK了
<el-menu
default-active="2"
class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose">
<el-submenu index="1">
<template slot="title">
<i class="el-icon-location"></i>
<span>导航一</span>
</template>
<el-menu-item-group>
<template slot="title">分组一</template>
<el-menu-item index="1-1">选项1</el-menu-item>
<el-menu-item index="1-2">选项2</el-menu-item>
</el-menu-item-group>
<el-menu-item-group title="分组2">
<el-menu-item index="1-3">选项3</el-menu-item>
</el-menu-item-group>
<el-submenu index="1-4">
<template slot="title">选项4</template>
<el-menu-item index="1-4-1">选项1</el-menu-item>
</el-submenu>
</el-submenu>
<el-menu-item index="2">
<i class="el-icon-menu"></i>
<span slot="title">导航二</span>
</el-menu-item>
<el-menu-item index="3" disabled>
<i class="el-icon-document"></i>
<span slot="title">导航三</span>
</el-menu-item>
<el-menu-item index="4">
<i class="el-icon-setting"></i>
<span slot="title">导航四</span>
</el-menu-item>
</el-menu>
本项目呢不要那么层侧边栏,所以我只要二级目路的话,就可以如下
由于项目中的这些分组和导航栏部分的内容,不会手动的去写,而是从数据库里面进行查询出来的结果,然后进行展示给用户观看,所以咱们现在去开发去我们的数据库展示的方法去
2、编写侧边栏展示的方法 (1)方法使用 需要有如下为什么不是我们的直接在methods里面编写一个方法呢,而在created里面编写,最后展示出来。
既然有咱们的数据,那么就必须有data了总要这些
编写方法测试方法
接下俩去后端找侧边栏的数据进行展示了
3、去后端请求数据 (1)看后端代码的编写这个MainMenu是我们的主侧边栏(导航)
这个Submenu是我们的次侧边栏(分组)
咱们先看后台数据库
select mainmenu.*,submenu.id as sid,submenu.title as stitle,submenu.path as spath
from mainmenu ,submenu
where mainmenu.id = submenu.mid;
由于我们前端展示出来这样肯定不行的,所以我们必须进行一对多的关系映射进行展示
(2)前端请求
编写请求方法
进行数据回填
进行循环遍历展示
这个item不是随便写的,而是和我们数据库里面一一对应了的
同样的这个item.slist也不是随便写的,而是我们在查询中的XXXMapper.xml文件里面写的
这个时候我们发现我们一点权限管理,下面的运动平台一样的跟着展示给我们看了,再次进行修改
为什么是xx加上‘’呢?因为我这里要求是字符串类型
修改样式
这个侧边栏我想弄成可伸缩的
只要我们的collapse属性为false的时候,它就是显示为缩进去了
显然上面的属性不能手动的去绑定,而应该是动态的进行绑定。
2、编写控制的方法
只要你伸我就是缩,否则翻过来
同样的也进行数据绑定
但是这种写法是把它写死,后期再从数据库里面查找。
这个main页面是什么都没有有的,而应该是我们点击了那个页面后,然后跳转到对应的页面去的,而这个一个面应该又是咱们一个个的新的XXX.vue文件,获得文件然后就进行展示。
但是我们总有个默认的吧,不可能进行就展示一个空白页面给用户,所以咱们来进行开发。
1、编写欢迎页面
因为我这时候的重定向,应该定位到我们页面的子组件上面去,所以就要这样子路径上面去了
此时不管我们怎么点,都是会显示的路径是到welcome页面
我这个是101好像不行,应该是咱们数据里面的path路径才可以。
当我们处于第一个用户列表的时候,如果我们点击刷新,会发现了我们的页面会收缩为如下的样式了,我应该是把它保存下来,再怎么刷新都是还是保存着之前的样子【这个问题不太好描述】
(1)测试说明问题
这个user路径是我们的路由哦,不是什么随便写的。
不管怎么刷新都是保存在user这个页面了,但是我们肯定是要动态的进行处理,而不是这样死板的的设置。
我们要进行动态的绑定,肯定又要定义一个属性data的返回值了
首先编写我们的方法
然后获取参数并且设置参数
五、正式开发我们的用户组件 (一)User组件 1、整体样式
首先看一下我的思路,我每一张表格上肯定都要写一个导航栏,可以回到首页,还有权限管理,还有运动平台的导航。这个效果就要交给面包屑来处理
修改样式
添加样式【这样式要在全局编写】
后面个important的原因是为了提高优先级
上面的样子太丑了,所以我们要进行变动
(3)获取用户列表
首先我想要在我们加载页面就会获取我们的用户数据,所以肯定要在created里面添加东西。
(2)渲染数据
肯定不可能这样展示,这样太丑了,用户不喜欢看。
(3)分页功能
正常情况下我们在下面都是能够有分页的功能,下一页,和上一页,然后定位到某一页的情况,所以这里来大概实现这一个功能。
首先打开我们的element-ui官网<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage4"
:page-sizes="[100, 200, 300, 400]"
:page-size="100"
layout="total, sizes, prev, pager, next, jumper"
:total="400">
</el-pagination>
size-change:每页最大的一个数量
current-change:当前页面变化数
layout:功能组件
效果是有了,现在点来点去是没什么时间触发的,所有现在去编写我们的方法
现在就OK了
梳理一下过程
首先第一步 当你点开我们的user页面后,这个页面的请求就会被触发,然后会去后端请求数据,封装在我们的res里面,然后获得了numbers里面第二步就是当你点击了我们的上一页或者下一页的时候,就会对更新一下数据,就会触发我们的getUserlist方法对后台数据进行刷新。 4、状态栏的修改
这个就算你是点击了,然后你重新刷新,后天没有被修改,所以是没有完成的功能,这里就来修改一下。
看dao层
修改前台
5、搜索栏的搜索
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)