ant-design-vue 登录表单校验
最近刚刚上手了 Vue3 的
antdvui框架,来做个简单的登录校验练练手
安装 antdv 依赖
npm install ant-design-vue --save
在 main.ts/js 中注册
// main.ts
import { createApp } from 'vue'
import App from './App.vue'
import 'ant-design-vue/dist/antd.css'
import Antd from 'ant-design-vue'
createApp(App).use(Antd).mount('#app')
编写登录页面
登录界面的具体代码在这里,博客中只展示重要的逻辑和样式。
// LoginPage.vue
<template>
<a-form>
<a-form-item>
<a-input placeholder="请输入用户名"></a-input>
</a-form-item>
<a-form-item>
<a-input-password placeholder="请输入密码"></a-input-password>
</a-form-item>
<a-form-item>
<a-button>登录</a-button>
</a-form-item>
</a-form>
</template>
基本的样式只有上面的几行代码,后续的逻辑都是关于表单验证的。下面来写一下 js 代码:
<script lang="ts" setup>
import {FormInstance} from "ant-design-vue";
import {reactive, ref} from "vue";
import {Rule} from "ant-design-vue/es/form";
const formRef = ref<FormInstance>(); // 通过为 form 加上 ref 属性可以获取表单实例
// 定义表单域
const formState = reactive({
userName: '',
passWord: ''
});
// 用户名校验规则
const userNameCheck = async (_rule: Rule, value: string) => {
if (!value) {
return Promise.reject('用户名不能为空')
} else if (value.length <= 2) {
return Promise.reject('用户名长度不能小于两个字符')
} else {
return Promise.resolve()
}
}
// 密码校验规则
const passWordCheck = async (_rule: Rule, value: string) => {
if (!value) {
return Promise.reject('密码不能为空')
} else if (value.length < 5) {
return Promise.reject('密码长度不能小于5个字符')
} else {
return Promise.resolve()
}
}
</script>
写好基本的校验规则后,就可以将相关的内容加到 <template> 中了:
<a-form :model="formState" ref="formRef" @finish="jump">
<!-- @finish="jump" 下面的js代码会提到 -->
<a-form-item :rules="[{validator: userNameCheck, trigger: 'blur'}]" name="userName">
<!-- form-item 必须加上 name 属性,且需要和 formState 中的属性同名 -->
<a-input
placeholder="请输入用户名"
v-model:value="formState.userName"
></a-input>
</a-form-item>
<a-form-item name="passWord" :rules="[{validator: passWordCheck, trigger: 'blur'}]">
<!-- trigger=blur 会在输入框失焦时触发表单校验,=change会在点击登录时触发校验 -->
<a-input-password placeholder="请输入密码" v-model:value="formState.passWord"></a-input-password>
</a-form-item>
<a-form-item>
<a-button type="primary" html-type="submit">登录</a-button>
<!-- 只有填写了 html-type="submit" 才可以使按钮具有表单校验的功能,才可以使 @finsih属性生效 -->
</a-form-item>
</a-form>
可以看到上面的 <a-form> 有一个 @finish 的属性,其值为一个名为 「jump」的函数,作用是 在点击按钮后,如果校验成功则进行路由跳转
function jump() {
router.push('/');
}
测试
在线浏览页面

在未满足校验条件点击提交 或者输入框失去焦点后,会触发校验失败的提示:

如果填写的内容满足要求,则会在点击按钮后执行 路由跳转


ant-design-vue 登录表单校验的更多相关文章
- 文档驱动 —— 表单组件(五):基于Ant Design Vue 的表单控件的demo,再也不需要写代码了。
源码 https://github.com/naturefwvue/nf-vue3-ant 特点 只需要更改meta,既可以切换表单 可以统一修改样式,统一升级,以最小的代价,应对UI的升级.切换,应 ...
- Vue.js表单校验;动画指令;避免内存泄露。
Vue.js表单校验: 动画指令:创建自定义的滚动指令. 避免内存泄露. 避免内存泄露 在单页面应用开发时SPA,用户无需刷新浏览器.所以javascript应用需要自行清理组件来防止内存占用不断增长 ...
- Vue Element-ui表单校验规则,你掌握了哪些?
1.前言 Element-ui表单校验规则,使得错误提示可以直接在form-item下面显示,无需弹出框,因此还是很好用的. 我在做了登录页面的表单校验后,一度以为我已经很了解表单的校验规则. ...
- 【转】vue.js表单校验详解
官方文档:https://monterail.github.io/vuelidate/ https://github.com/monterail/vuelidate 1.npm安装vue-valida ...
- vue+element表单校验功能
要实现这个功能其实并不难,element组件直接用就可以, 但是我在使用过程中碰到了几个坑,就记录下来,分享给大家,避免落坑,话不多说,直接上过程...... 表单校验功能: 实现这个功能,总共分 ...
- vue elementUI 表单校验(数组多层嵌套)
在使用vue element-ui form表单渲染的时候,会遇到这样的数据结构: { "title":''123455, "email":'123456@qq ...
- Ant Design Vue 走马灯实现单页多张图片轮播
最近的项目有个需求是,这种单页多图一次滚动一张图片的轮播效果,项目组件库是antd 然而用了antd的走马灯是这样子的 我们可以看到官网给的api是没有这种功能,百度上也多是在css上动刀,那样也就毕 ...
- vue elementUI 表单校验(多层嵌套)
<template> <el-form :model="formData" :rules="formRule" ref="formD ...
- vue 表单校验(二)
vue 表单校验(二) vue element-ui表单校验 由于现在使用element-ui进行form表单校验,因而使用其自带的校验规则进行校验,发现有些并不是那么好校验,或者说是校验起来很繁琐, ...
- 基于Ant Design Vue封装一个表单控件
开源代码 https://github.com/naturefwvue/nf-vue3-ant 有缺点本来是写在最后的,但是博文写的似乎有点太长了,估计大家没时间往下看,于是就把有缺点写在前面了,不喜 ...
随机推荐
- Python在linux系统和window系统相对路径导致找不到文件报错
文件路径 project1 -dir1 --test1.py -dir2 --test2.text -main.py test1.py from pathlib import Path "& ...
- 【ActiveJdbc】04
一.乐观锁 作者po的乐观锁思想: http://en.wikipedia.org/wiki/Optimistic_concurrency_control 维基百科,墙了看不到 作者要求表字段必须存在 ...
- 【ActiveJdbc】01 入门
官方快速上手文档: https://javalite.io/activejdbchttps://javalite.io/getting_started 完整介绍: https://javalite.i ...
- 【Layui】12 评分 Rate
文档地址: https://www.layui.com/demo/rate.html 基础样式: <fieldset class="layui-elem-field layui-fie ...
- 在python中numpy.sum的性能真的好吗
首先我们应该知道np.sum是用C语言写的矢量计算,应用场景为规模较大的numpy数组求和.本文要说的就是numpy.sum是不是对规模较小的numpy数组求和也同样会有不错的性能? 代码: impo ...
- ComfyUI插件:efficiency-nodes-comfyui节点
前言: 学习ComfyUI是一场持久战, efficiency-nodes-comfyui是提高工作流创造效率的工具,包含效率节点整合工作流中的基础功能,比如Efficient Loader节点相当于 ...
- ArgoWorkflow 教程(一)--DevOps 另一选择?云原生 CICD 初体验
本文主要记录了如何使用 ArgoWorkflow 构建流水线,以及 ArgoWorkflow 中 的 Workflow.Template 等概念模型. 本文主要分析以下问题: 1)如何创建流水线 2) ...
- MPTCP(一) :MPTCP概览
MPTCP概览 参考链接 MPTCP官网 http://multipath-tcp.org/ MPTCP入门 https://access.redhat.com/documentation/zh-cn ...
- Windows 7远程桌面连接Ubuntu 18.04
从Windows 7远程到Windows系统比较简单,只要对方电脑开启远程桌面功能就可以了,但Windows 7远程桌面连接到Ubuntu 16.04比较复杂一点,具体操作步骤如下. 1 安装xrdp ...
- 线性dp:最长公共子序列
最长公共子序列 本文讲解的题与leetcode1143.最长公共子序列这题一样,阅读完可以挑战一下. 力扣题目链接 题目叙述: 给定两个字符串,输出其最长公共子序列,并输出它的长度 输入: ADABE ...