Vue3大事件项目1 登录注册验证

创建项目

b54a388b53b643d48a040e49d7b5d14b.png

引入 element-ui 组件库

4f066e598fe846d98d30ccf4e09d3cfb.png

登录:注册样式准备之后,配置校验规则(4个条件:一数据、二规则)

1. 校验相关
       (1) 给当前表单绑上整个的数据对象:el-form => :model="ruleForm"      绑定的整个form的数据对象 { xxx, xxx, xxx }  (<el-form-item> </el-form-item>)

<el-form:model="formModel">
const formModel = ref({username: '',password: '',repassword: ''
})


       (2) 绑上对应的校验规则:el-form => :rules="rules"         绑定的整个rules规则对象  { xxx, xxx, xxx }(注意一一对应)  (<el-form-item> </el-form-item>)

<el-form:model="formModel":rules="rules"  
>
const rules = {username: [{required: true,message: 'please',//blur:失焦触发,change:值改变的时候触发trigger: 'blur'},{min: 5,max: 10,message: 'yhum',trigger: 'blur'}],password: [{required: true,message: 'please',//blur:失焦触发,change:值改变的时候触发trigger: 'blur'},{pattern: /^\S{6,15}$/,message: '6-15'}]
}


       (3) 表单元素 => v-model="ruleForm.xxx" 给表单元素,绑定form的子属性,用户输入的内容才会同步到表单里去。(<el-input><</el-input>)

 <el-inputv-model="formModel.repassword":prefix-icon="Lock"type="password"placeholder="请输入再次密码"></el-input>


       (4) el-form-item => prop配置生效的是rules里的哪个校验规则 (和rules中的字段要对应)   (<el-form-item> </el-form-item>)

 <el-form-item prop="username"><el-inputv-model="formModel.username":prefix-icon="User"placeholder="请输入用户名"></el-input></el-form-item>

2.

(1)整个表单的校验规则

                1.非空校验 required:true message信息提示 trigger:触发校验的时机
                2.长度校验 min:xx,max:xx
                3.正则校验pattern:正则规则     \s  非空校验
                4.自定义校验 => 自己写逻辑校验(校验函数)   validator:(rule,value,callback) 

  • rule   当前校验规则相关的信息
  • value   所校验的表单元素目前的表单值
  • callback   两种校验方式,{第一种:callback() 代表校验成功。第二种:callback(new Error(错误信息))   代表校验失败。}无论成功还是失败,都要回调     

(2)自定义校验规则

目录

创建项目

引入 element-ui 组件库

登录:注册样式准备之后,配置校验规则(4个条件)


 

全部代码

<script setup>
import { User, Lock } from '@element-plus/icons-vue'
import { ref } from 'vue'
const isRegister = ref(true)
//整个的用于提交的form数据对象
const formModel = ref({username: '',password: '',repassword: ''
})
//整个表单的校验规则
//1.非空校验 required:true message信息提示 trigger:触发校验的时机
//2.长度校验 min:xx,max:xx
//3.正则校验pattern:正则规则
const rules = {username: [{required: true,message: 'please',//blur:失焦触发,change:值改变的时候触发trigger: 'blur'},{min: 5,max: 10,message: 'yhum',trigger: 'blur'}],password: [{required: true,message: 'please',//blur:失焦触发,change:值改变的时候触发trigger: 'blur'},{pattern: /^\S{6,15}$/,message: '6-15'}],repassword: [{required: true,message: 'please',//blur:失焦触发,change:值改变的时候触发trigger: 'blur'},{pattern: /^\S{6,15}$/,message: '6-15'},{validator: (rule, value, callback) => {if (value !== formModel.value.password) {callback(new Error('no'))} else {callback() //校验成功,也需要正常回调 callback()}},trigger: 'blue'}]
}
</script><template><el-row class="login-page"><el-col :span="12" class="bg"></el-col><el-col :span="6" :offset="3" class="form"><el-form:model="formModel":rulesref="form"size="large"autocomplete="off"v-if="isRegister"><el-form-item><h1>注册</h1></el-form-item><el-form-item prop="username"><el-inputv-model="formModel.username":prefix-icon="User"placeholder="请输入用户名"></el-input></el-form-item><el-form-item prop="password"><el-inputv-model="formModel.password":prefix-icon="Lock"type="password"placeholder="请输入密码"></el-input></el-form-item><el-form-item prop="repassword"><el-inputv-model="formModel.repassword":prefix-icon="Lock"type="password"placeholder="请输入再次密码"></el-input></el-form-item><el-form-item><el-button class="button" type="primary" auto-insert-space>注册</el-button></el-form-item><el-form-item class="flex"><el-link type="info" :underline="false" @click="isRegister = false">← 返回</el-link></el-form-item></el-form><el-form ref="form" size="large" autocomplete="off" v-else><el-form-item><h1>登录</h1></el-form-item><el-form-item prop="username"><el-inputv-model="formModel.username":prefix-icon="User"placeholder="请输入用户名"></el-input></el-form-item><el-form-item><el-inputname="password":prefix-icon="Lock"type="password"placeholder="请输入密码"></el-input></el-form-item><el-form-item class="flex"><div class="flex"><el-checkbox>记住我</el-checkbox><el-link type="primary" :underline="false">忘记密码?</el-link></div></el-form-item><el-form-item><el-button class="button" type="primary" auto-insert-space>登录</el-button></el-form-item><el-form-item class="flex"><el-link type="info" :underline="false" @click="isRegister = true">注册 →</el-link></el-form-item></el-form></el-col></el-row>
</template><style lang="scss" scoped>
.login-page {height: 100vh;background-color: #fff;.bg {background:url('@/assets/logo2.png') no-repeat 60% center / 240px auto,url('@/assets/login_bg.jpg') no-repeat center / cover;border-radius: 0 20px 20px 0;}.form {display: flex;flex-direction: column;justify-content: center;user-select: none;.title {margin: 0 auto;}.button {width: 100%;}.flex {width: 100%;display: flex;justify-content: space-between;}}
}
</style>

注册功能

1.新建 api/user.js 封装

import request from '@/utils/request'//注册接口
export const userRegisterService = ({ username, password, repassword }) => {//return 和 {} 可以省略//return request.post('/api/reg', { username, password, repassword })request.post('/api/reg', { username, password, repassword })
}

2.页面中调用(LoginPage.vue)

const register = async () => {//注册成功之前,先进行校验。校验成功,就发请求;校验失败,自动提示//调用validate会触发校验,给用户显示错误提示await form.value.validate()await userRegisterService(formModel.value)
//调用组件ElMessage.success('success')isRegister.value = false
}

3.eslintrc 中声明全局变量名, 解决 ElMessage 报错问题

module.exports = {...globals: {ElMessage: 'readonly',ElMessageBox: 'readonly',ElLoading: 'readonly'}
}


   

切换的时候,重置表单内容,利用watch监视

        当isRegister变量发生改变时,这段代码就会运行,并清空formModel对象中的所有表单输入字段,从而重置注册表单。watch 可以让你设置一个回调函数,当被监控的数据发生变化时,这个回调函数就会被执行 
 

watch(isRegister, () => {formModel.value = {username: '',password: '',repassword: ''}})

登录:封装登录接口

9d6e027f43b0420b9b4a29032974b8af.png

//登录接口post
//不能加花括号,否则就要加return
export const userLoginService = ({ username, password }) =>request.post('/api/login', {username,password})

登录:调用方法将 token 存入 pinia 并 自动持久化本地

//调store下的user里的setToken方法
const userStore = useUserStore()
//当你调用useRouter()函数时,它会返回一个路由实例对象,你可以通过这个对象来访问和操作路由相关的功能。
//记得导入
const router = useRouter()
const login = async () => {//登录前进行预校验,没通过就不能发请求await form.value.validate()//调用接口,发送数据const res = await userLoginService(formModel.value)//把返回的res存到pinia里面去,并且自动持久化到本地userStore.setToken(res.data.token)//给出提示,登录成功ElMessage.success('success')//跳转首页router.push('/')
}

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos7搭建 Skywalking 单机版

介绍 Skywalking是应用性能监控平台&#xff0c;可用于分布式系统&#xff0c;支持微服务、云原生、Docker、Kubernetes 等多种架构场景。 整体架构如图 Agent &#xff1a;在应用中&#xff0c;收集 Trace、Log、Metrics 等监控数据&#xff0c;使用 RPC、RESTful API、Kafk…

JavaScript逆向爬虫——无限debugger的原理与绕过

debugger 是 JavaScript 中定义的一个专门用于断点调试的关键字&#xff0c;只要遇到它&#xff0c;JavaScript 的执行便会在此处中断&#xff0c;进入调试模式。 有了 debugger 这个关键字&#xff0c;就可以非常方便地对 JavaScript 代码进行调试&#xff0c;比如使用 JavaSc…

【热门话题】计算机视觉入门:探索数字世界中的“视觉智能”

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 计算机视觉入门&#xff1a;探索数字世界中的“视觉智能”摘要正文一、计算机视…

蓝桥杯练习题

<1>搜一搜呀——filter 目标 请完善 index.html 文件&#xff0c;让页面具有如下所示的效果&#xff1a; 题解 computed: {filteredList() {// TODO: 请补充代码return this.postList.filter(post>{return post.title.match(this.search)})},}, 过滤器filter 定义…

顺序表实战——基于顺序表的通讯录

前言&#xff1a;本篇文章主要是利用顺序表作为底层&#xff0c; 实现一个通讯录。偏向于应用&#xff0c; 对于已经学习过c的友友们可能没有难度了已经。没有学习过c的友友&#xff0c; 如果顺序表不会写&#xff0c; 或者说没有自己实现过&#xff0c; 请移步学习顺序表相关内…

springboot 问题整合

springboot 启动后访问报错 问题&#xff1a;org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 原因&#xff1a;mybatis 的全局配置文件和 sql 映射文件没有写 解决&#xff1a;在 application.yml 中添加 mybatis 配置 mybatis:# 全局配…

嵌入式网线连接——笔记本电脑设置

一、需求 我们调试很多设备经常需要用到网线去调试&#xff0c;当然主流是USB&#xff0c;和网线。 二、笔记本电脑端设备 有网口的&#xff0c;非常方便&#xff0c;如果没有网口&#xff0c;则需要用到USB转网口 连接指示灯&#xff1a; 绿色&#xff1a;灯亮表示连接正常…

前端开发攻略---简化响应式设计:利用 SCSS 优雅管理媒体查询

1、演示 2、未优化前的代码 .header {width: 100px;height: 100px;background-color: red; } media (min-width: 320px) and (max-width: 480px) {.header {width: 10px;} } media (min-width: 320px) and (max-width: 480px) {.header {height: 20px;} } media (min-width: 48…

电子元器件商城开发用什么技术框架?

随着信息技术的飞速发展&#xff0c;电子元器件商城已成为电子工程师和采购人员获取元器件的重要渠道。电子元器件商城的开发涉及众多技术和开发语言的选择&#xff0c;本文将详细分析电子元器件商城开发中常用的技术和开发语言&#xff0c;以及它们各自的优势。 一、电子元器…

Ubuntu系统使用Docker本地部署Android模拟器并实现公网访问

文章目录 1. 虚拟化环境检查2. Android 模拟器部署3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问小结 6. 固定Cpolar公网地址7. 固定地址访问 本文主要介绍如何在Ubuntu系统使用Docker部署docker-android安卓模拟器&#xff0c;并结合cpolar内网穿透工具实现公网远程访问本地…

【SpringBoot】SpringBoot项目快速搭建

本文将介绍Springboot项目的快速搭建 快速创建SpringBoot项目 打开IDEA在File->New->Project中新建项目 点击左侧的Spring Initializr 输入以下信息&#xff1a; Name 项目名称Group 根据公司域名来&#xff0c;或者默认com.example【倒序域名】Package Name 包名&am…

Ubuntu22.04修改默认窗口系统为X11

Ubuntu22.04安装默认窗口系统为Wayland&#xff08;通过设置->关于可以看到&#xff09;。 一、用Ubuntu on Xorg会话登录 用户登录时&#xff0c;点“未列出”&#xff0c;输入用户名后&#xff0c;在登录界面底部的齿轮图标中&#xff0c;选择 "Ubuntu on Xorg&quo…

php-redis windows ,pecl 已经不维护了,解决方案:php 8.2 | 8.3+ redis extension windows

从论坛上pecl 已经不维护了&#xff0c;直接让大家到ci 去下载 https://stackoverflow.com/questions/76496488/redis-dll-not-found-for-php8-2/76496489#76496489 让我们找最新的一次commit &#xff0c;然后又action 构建&#xff0c;再下载&#xff0c;这样的话也好&#…

基于机器学习的木马检测模型的设计与实现(论文)_kaic

摘 要 科技的发展带来了人们生活的改变&#xff0c;近年来我国网民已突破十亿人口&#xff0c; 而且在后疫 情时代&#xff0c; 经历了疫情时期的一系列线上活动&#xff0c; 人们对网络的依赖比以往任何时期都要高 得多。高频次的上网行为也带来了一系列安全问题&#xff…

ISTQB选择国内版,还是国际版呢

1, ISTQB简介 ISTQB&#xff08;International Software Testing Qualifications Board&#xff09;是一个国际软件测试资格认证机构&#xff0c;旨在提供一个统一的软件测试认证标准。ISTQB成立于2002年&#xff0c;是非盈利性的组织&#xff0c;由世界各地的国家或地区软件测…

动态规划刷题(2)之杨辉三角(详细解释)

最近在自学动态规划,网上到处找资料学习: 在这里记录我的刷题历史: 题目都是在力扣里面刷的!! 这里,我放一个刷动态规划的链接在这里:动态规划知识点题库 - 力扣(LeetCode) 力扣 在这里附加动态规划相关知识点:动态规划(DP)-CSDN博客文章浏览阅读197次。动态规划…

Redis Cluster集群模式

目录 一、理论 1.1 概念 1.2 集群的作用 1.3 redis集群的数据分片 1.4 Redis集群的主从复制模型 二、实践 2.1 Redis集群模式的搭建 2.1.1 cluster集群前期工作 2.1.2 开启群集功能 2.1.3 启动redis节点 2.1.4 启动集群 2.2 测试集群 总结 一、理论 1.1 概念 集群&a…

html与css练习

一丶学校官方网站页面制作 1.代码 ①html代码 ②css代码 2.实现效果图 二丶使用动画完成过度变换效果 1.代码 ①html代码 ②css代码 2.效果图片

【java探索之旅】走进循环结构 深入解析while、for和do while的用法

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、循环结构1.1 while循环1.2 while代码示例1.3 break1.4 continue 二、for循环2.1 基…

5分钟了解清楚【osgb】格式的倾斜摄影数据metadata.xml有几种规范

数据格式同样都是osgb&#xff0c;不同软件生产的&#xff0c;建模是参数不一样&#xff0c;还是有很大区别的。尤其在应用阶段。 本文从建模软件、数据组织结构、metadata.xml&#xff08;投影信息&#xff09;、应用几个方面进行了经验性总结。不论您是初步开始建模&#xf…