Element-UI+vue实现登录表单

小灰灰 2024-04-03 07:43 184阅读 0赞

#

ELement-UI官网,往下划便可以看到各种属性和方法

Element - The world’s most popular Vue UI framework

目录

前奏:

一、登录组件表单的数据验证

第一步:通过属性绑定指定rules校验对象

第二步:在data数据中定义rules检验对象,每个属性都是一个校验规则

第三步:给利用prop给每一个表单项指定不同的验证规则

完整代码

二、表单的重置

操作

表单有关的方法

三、表单登录前预验证

四、根据与验证结果验证是否发送请求

开始操作

五、登录组件配置弹窗提示(登录成功或失败)

六、登录组件登录成功后的行为

七、路由导航守卫控制访问权限

八、登录/退出功能

退出功能


前奏:

将我们的sql文件进行还原

8cc6e1404542411f9b4e5b6f40cbf849.png

一、登录组件表单的数据验证

第一步:通过属性绑定指定rules校验对象

  1. <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">

第二步:在data数据中定义rules检验对象,每个属性都是一个校验规则

  1. rules: {
  2. name: [
  3. { required: true, message: '请输入活动名称', trigger: 'blur' },
  4. { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
  5. ],
  6. region: [
  7. { required: true, message: '请选择活动区域', trigger: 'change' }
  8. ],
  9. }

第三步:给利用prop给每一个表单项指定不同的验证规则

注意这个地方是在item上面添加,并不是在文本框上添加

  1. <el-form-item label="活动名称" prop="name">

完整代码

  1. <!-- 登录表单区域 logininFormRules是一个验证规则对象-->
  2. <el-form :model="loginForm" :rules="logininFormRules" label-width="0px" class="login_form">
  3. <!-- 用户名区域 -->
  4. <el-form-item prop="username">
  5. <!-- 用户名文本框 这里使用的阿里图标库 这种写法是阿里规定的 -->
  6. <el-input v-model="loginForm.username" prefix-icon="iconfont icon-user"></el-input>
  7. </el-form-item >
  8. <!-- 密码区域 -->
  9. <el-form-item prop="password">
  10. <!-- 密码文本框 -->
  11. <el-input v-model="loginForm.password" type="password" prefix-icon="iconfont icon-3702mima" ></el-input>
  12. </el-form-item>
  13. <!-- 按钮区域 -->
  14. <el-form-item class="btns" >
  15. <el-button type="primary">登录</el-button>
  16. <el-button type="info">重置</el-button>
  17. </el-form-item>
  18. </el-form>
  19. data(){
  20. return{
  21. // 登录表单的数据绑定对象
  22. loginForm:{
  23. // 账户
  24. username:'',
  25. // 密码
  26. password:''
  27. },
  28. // 表单的验证规则对象
  29. logininFormRules:{
  30. //验证用户名是否合法
  31. username:[
  32. // 第一个参数表示必填项 如果没有符合要求就会输出message的信息 trigger: 'blur'表示鼠标离开后验证
  33. { required: true, message: '请输入登录名称', trigger: 'blur' },
  34. { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur'}
  35. ],
  36. // 验证密码是否合法
  37. password:[
  38. { required: true, message: '请输入密码', trigger: 'blur' },
  39. { min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur'}
  40. ],
  41. }
  42. }
  43. }

3ff6df51fb5b42ba9f6d3214ad1128e0.png

二、表单的重置

我们应该做的就是获取表单的实例对象,使用resetFields方法,对整个表单进行重置,将所有字段重置为初始值并移除校验结果

具体详解参照链接

Vue-ref属性(脚手架获取DOM元素)、props配置、mixin混入、插件、scoped样式_我爱布朗熊的博客-CSDN博客_ref获取样式

#

操作

给表单添加ref属性

  1. <el-form ref="loginFormRef" :model="loginForm" :rules="logininFormRules" label-width="0px" class="login_form">

为按钮绑定单击事件

  1. <el-button type="info" @click="resetLoginForm">重置</el-button>

调用方法

  1. methods: {
  2. // 点击重置按钮,重置登录表单
  3. resetLoginForm(){
  4. this.$refs.loginFormRef.resetFields()
  5. }
  6. },

表单有关的方法

6b5ab2b4512e4a5d967c4ebe676824df.png

三、表单登录前预验证

我们可以调用form表单实例对象的validate属性进行表单的预验证

刚刚我们已经给表单添加ref属性了,现在不需要添加了,直接用就可以了

  1. <el-button type="primary" @click="login">登录</el-button>
  2. login(){
  3. // validate()会接受一个回调函数,从而我们可以拿到自己想要的结果,这里我们使用了一个匿名箭头函数
  4. this.$refs.loginFormRef.validate( (valid)=>{
  5. // valid其实就是表单验证的结果 成功时true
  6. console.log(valid);
  7. })
  8. }

b30c5589237049a2af29cf875476b986.png

#

四、根据与验证结果验证是否发送请求

这个地方需要一个数据库以及服务器的文件,需要的小朋友可以关注我,找我要

开始操作

26d8f38dac524f07ba36f412cfd98a10.png

如果没有安装的话应该首先安装一下axios,我们需要使用这个发送请求

56d955d1e4b8405fbdc8e6518dea4def.png

首先需要配置在main.js中

在这个地方$http是自己起名的

  1. import axios from 'axios'
  2. // 配置请求根路径
  3. axios.defaults.baseURL='http://127.0.0.1:8888/api/private/v1/'
  4. // 将axios挂载上去 因为每个组件都可以使用this访问到$http,从而发起axios请求
  5. Vue.prototype.$http=axios

对登录点击事件进一步完善

{data:res}表示解构赋值出来,把里面的data对象赋值给res(这个data对象使我们请求之后给我们返回的data数据)

b8c54e7304e84bd48967ffc74d591f48.png

其中res就是下图中的数据

5ca72043d27a49fba542a15598d23fb4.png

bb2ea5d4793d458aa8277024c1cedc1e.png

五、登录组件配置弹窗提示(登录成功或失败)

我们使用Element-UI中的消息提示组件

其中$message是一个自定义属性(在main.js文件中配置)

  1. // 导入弹框提示
  2. import{Message} from 'element-ui'
  3. // 这个与其他的组件不同,这个需要挂载
  4. Vue.prototype.$message = Message

登录成功的时候不能return 否则代码不向下执行了

  1. if(res.meta.status !==200){
  2. return this.$message.error('登录失败')
  3. }else
  4. this.$message.success('登录成功')

38babebb111a46acb109be0f9ad1b6af.png

  1. //点击登录按钮,进行登录
  2. login(){
  3. // validate()会接受一个回调函数,从而我们可以拿到自己想要的结果,这里我们使用了一个匿名箭头函数
  4. this.$refs.loginFormRef.validate( async (valid)=>{
  5. // valid其实就是表单验证的结果 成功时true
  6. // console.log(valid);
  7. if(!valid){
  8. // 运行到这里说明valid是false 预验证没有通过
  9. return;
  10. }
  11. // 运行到这里说明预验证通过了
  12. // login是请求路径我们已经写过基础路径了 this.loginForm携带过去的参数
  13. const{data:res}=await this.$http.post('login',this.loginForm);
  14. console.log(res.meta.status)
  15. if(res.meta.status !==200){
  16. return this.$message.error('登录失败')
  17. }else
  18. this.$message.success('登录成功')
  19. // console.log(this.$http.post('login',this.loginForm))这样返回的是一个promise对象
  20. })

六、登录组件登录成功后的行为

我们这里需要本地存储,可以在下面这个链接进行复习

Vue——webStorage浏览器本地存储、localStorage、sessionStorage_我爱布朗熊的博客-CSDN博客

将登陆成功之后的token,保存到客户端的sessionStorage中

将项目中除了登录以外的API接口,必须在登陆之后才能访问

token只应在当前网站打开期间生效,所以将token保存在sessionStorage中

通过编程式导航跳转到后台主页,路由地址是/home

  1. login(){
  2. // validate()会接受一个回调函数,从而我们可以拿到自己想要的结果,这里我们使用了一个匿名箭头函数
  3. this.$refs.loginFormRef.validate( async (valid)=>{
  4. // valid其实就是表单验证的结果 成功时true
  5. // console.log(valid);
  6. if(!valid){
  7. // 运行到这里说明valid是false 预验证没有通过
  8. return;
  9. }
  10. // 运行到这里说明预验证通过了
  11. // login是请求路径我们已经写过基础路径了 this.loginForm携带过去的参数
  12. const{data:res}=await this.$http.post('login',this.loginForm);
  13. console.log(res.meta.status)
  14. if(res.meta.status !==200){
  15. return this.$message.error('登录失败')
  16. }else
  17. this.$message.success('登录成功')
  18. // 将登陆成功之后的token,保存到客户端的sessionStorage中
  19. // 将项目中除了登录以外的API接口,必须在登陆之后才能访问
  20. // token只应在当前网站打开期间生效,所以将token保存在sessionStorage中
  21. window.sessionStorage.setItem('token',res.data.token)
  22. // 通过编程式导航跳转到后台主页,路由地址是/home
  23. this.$router.push('/home')
  24. })
  25. }

七、路由导航守卫控制访问权限

技术前提:路由守卫Vue——路由守卫(全局前置路由守卫beforeEach、全局后置路由守卫router.afterEach、独享路由守卫beforeEnter、组件内路由守卫 )_我爱布朗熊的博客-CSDN博客

问题:当我们把本地存储的token删除之后再刷新页面,还是可以进入到home界面,这是非常不合理的,所以我们要配置路由导航的使用

需求:如果用户没有登录,但是直接通过URL访问特定页面,需要重新导航到登录页面

6bb8268a8db9442aa2e50dda4ecfebd7.png

  1. // 挂载路由导航守卫
  2. router.beforeEach((to,from,next)=>{
  3. // to 将要访问的路径
  4. // from 代表从哪个路径来
  5. // next 是一个函数,表示方形
  6. // next() 放行 或 next('/login)像这样给一个强制跳转的路径
  7. // 如果用户访问的是登录页,直接放行
  8. if(to.path ==='/login')
  9. return next()
  10. // 获取token
  11. const tokenStr= window.sessionStorage.getItem('token')
  12. if(!tokenStr){
  13. // 运行到这里说明你的tokenStr是空,强制跳转到登录界面
  14. next('/login')
  15. }
  16. // 运行到这里说明有taken,直接放行
  17. next()
  18. })

八、登录/退出功能

退出功能

基于token的方式实现退出比较简单,只需要销毁本地的token即可。这样后续的请求就不会携带token,必须重新登陆生成一个新的token之后才可以访问页面

  1. <template>
  2. <div>
  3. <el-button @click="logout" type="info">退出</el-button>
  4. </div>
  5. </template>
  6. <script >
  7. export default{
  8. name:'Home',
  9. methods:{
  10. // 退出操作
  11. logout(){
  12. // 清空token
  13. window.sessionStorage.clear()
  14. // 将登录页面转入到登录界面
  15. this.$router.push('/login')
  16. }
  17. }
  18. }
  19. </script>
  20. <style scoped lang="less">
  21. </style>

发表评论

表情:
评论列表 (有 0 条评论,184人围观)

还没有评论,来说两句吧...

相关阅读