最近刚刚上手了 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. 洛谷P10693

    洛谷P10693 好奇怪的题目编号 思路提取 input 11 2 13 4 5 3 7 9 9 11 11 12 output 9 以人造数据为例. 首先我们让\(i\)\(\to\)\(a_i\) ...

  2. selenium高亮显示定位到的页面元素

    from selenium import webdriver import unittest,time def highLightElement(driver,element): #封装好的高亮显示页 ...

  3. pytorch问题记录

    1.找不到fused 2.找不到torch_extensions 网上的教程一般都是linux系统的,Windows这个是在C盘目录下 3.c++开发环境中找不到vcvars64.bat 解决方法:重 ...

  4. 为团队配置Linux环境,简单高效的项目共享方案

    前言 最近好久没写博客了,事情太多了,我还搞了个新的好玩的项目,等后续做得差不多了来写篇文章介绍一下. 在我们目前的AI项目中,团队需要共同使用一台GPU服务器来做模型训练和数据处理.为了让每个团队成 ...

  5. 【ElasticSearch】03 部署

    Windows集群部署: 把包解压成三个节点 [kibana-7.16.3-windows-x86_64.zip] - Node-1001 - Node-1002 - Node-1003 修改集群的配 ...

  6. 人机协同的半自动人形机器人 —— Covariant公司的RFM-1机器人

    Covariant公司的RFM-1机器人实现了一个极为有意思的功能,那就是在机器人执行任务的过程中如果遇到无法处理的情况下就会停止下来然后等待人类的语言指示,比如:夹具向上移动2cm,更换更大型号的夹 ...

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

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

  8. 【导师招募】Apache DolphinScheduler 社区又又又入选开源之夏啦!

    很高兴和大家宣布,Apache DolphinScheduler 社区今年再次成功入选入选由中国科学院软件研究所开源软件供应链点亮计划发起的"开源之夏"活动. 入选公示链接:htt ...

  9. 9. 从0学ARM Cortex-A9 LED汇编、C语言驱动编写

    0. 前言 一般我们购买一个开发板,厂家都会给出对应的电路图文件,我们可以通过搜索对应名称来查找到对应的外设.对于驱动工程师来说,我们只需要知道外设与SOC交互的一些数据线和信号线即可. 用主控芯片控 ...

  10. Terraform中的for_each和count

    通过Terraform创建云主机时,在某些业务场景下,一个机器需要挂载多个云盘,一般云厂商都是单独创建云主机和云硬盘然后通过attachment的资源去挂载,因此我们的模板大致如下: resource ...