最近刚刚上手了 Vue3antdv ui框架,来做个简单的登录校验练练手

安装 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 登录表单校验的更多相关文章

  1. 文档驱动 —— 表单组件(五):基于Ant Design Vue 的表单控件的demo,再也不需要写代码了。

    源码 https://github.com/naturefwvue/nf-vue3-ant 特点 只需要更改meta,既可以切换表单 可以统一修改样式,统一升级,以最小的代价,应对UI的升级.切换,应 ...

  2. Vue.js表单校验;动画指令;避免内存泄露。

    Vue.js表单校验: 动画指令:创建自定义的滚动指令. 避免内存泄露. 避免内存泄露 在单页面应用开发时SPA,用户无需刷新浏览器.所以javascript应用需要自行清理组件来防止内存占用不断增长 ...

  3. Vue Element-ui表单校验规则,你掌握了哪些?

    1.前言   Element-ui表单校验规则,使得错误提示可以直接在form-item下面显示,无需弹出框,因此还是很好用的.   我在做了登录页面的表单校验后,一度以为我已经很了解表单的校验规则. ...

  4. 【转】vue.js表单校验详解

    官方文档:https://monterail.github.io/vuelidate/ https://github.com/monterail/vuelidate 1.npm安装vue-valida ...

  5. vue+element表单校验功能

    要实现这个功能其实并不难,element组件直接用就可以, 但是我在使用过程中碰到了几个坑,就记录下来,分享给大家,避免落坑,话不多说,直接上过程...... 表单校验功能:   实现这个功能,总共分 ...

  6. vue elementUI 表单校验(数组多层嵌套)

    在使用vue element-ui form表单渲染的时候,会遇到这样的数据结构: { "title":''123455, "email":'123456@qq ...

  7. Ant Design Vue 走马灯实现单页多张图片轮播

    最近的项目有个需求是,这种单页多图一次滚动一张图片的轮播效果,项目组件库是antd 然而用了antd的走马灯是这样子的 我们可以看到官网给的api是没有这种功能,百度上也多是在css上动刀,那样也就毕 ...

  8. vue elementUI 表单校验(多层嵌套)

    <template> <el-form :model="formData" :rules="formRule" ref="formD ...

  9. vue 表单校验(二)

    vue 表单校验(二) vue element-ui表单校验 由于现在使用element-ui进行form表单校验,因而使用其自带的校验规则进行校验,发现有些并不是那么好校验,或者说是校验起来很繁琐, ...

  10. 基于Ant Design Vue封装一个表单控件

    开源代码 https://github.com/naturefwvue/nf-vue3-ant 有缺点本来是写在最后的,但是博文写的似乎有点太长了,估计大家没时间往下看,于是就把有缺点写在前面了,不喜 ...

随机推荐

  1. Python在linux系统和window系统相对路径导致找不到文件报错

    文件路径 project1 -dir1 --test1.py -dir2 --test2.text -main.py test1.py from pathlib import Path "& ...

  2. 【ActiveJdbc】04

    一.乐观锁 作者po的乐观锁思想: http://en.wikipedia.org/wiki/Optimistic_concurrency_control 维基百科,墙了看不到 作者要求表字段必须存在 ...

  3. 【ActiveJdbc】01 入门

    官方快速上手文档: https://javalite.io/activejdbchttps://javalite.io/getting_started 完整介绍: https://javalite.i ...

  4. 【Layui】12 评分 Rate

    文档地址: https://www.layui.com/demo/rate.html 基础样式: <fieldset class="layui-elem-field layui-fie ...

  5. 在python中numpy.sum的性能真的好吗

    首先我们应该知道np.sum是用C语言写的矢量计算,应用场景为规模较大的numpy数组求和.本文要说的就是numpy.sum是不是对规模较小的numpy数组求和也同样会有不错的性能? 代码: impo ...

  6. ComfyUI插件:efficiency-nodes-comfyui节点

    前言: 学习ComfyUI是一场持久战, efficiency-nodes-comfyui是提高工作流创造效率的工具,包含效率节点整合工作流中的基础功能,比如Efficient Loader节点相当于 ...

  7. ArgoWorkflow 教程(一)--DevOps 另一选择?云原生 CICD 初体验

    本文主要记录了如何使用 ArgoWorkflow 构建流水线,以及 ArgoWorkflow 中 的 Workflow.Template 等概念模型. 本文主要分析以下问题: 1)如何创建流水线 2) ...

  8. MPTCP(一) :MPTCP概览

    MPTCP概览 参考链接 MPTCP官网 http://multipath-tcp.org/ MPTCP入门 https://access.redhat.com/documentation/zh-cn ...

  9. Windows 7远程桌面连接Ubuntu 18.04

    从Windows 7远程到Windows系统比较简单,只要对方电脑开启远程桌面功能就可以了,但Windows 7远程桌面连接到Ubuntu 16.04比较复杂一点,具体操作步骤如下. 1 安装xrdp ...

  10. 线性dp:最长公共子序列

    最长公共子序列 本文讲解的题与leetcode1143.最长公共子序列这题一样,阅读完可以挑战一下. 力扣题目链接 题目叙述: 给定两个字符串,输出其最长公共子序列,并输出它的长度 输入: ADABE ...