iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >vue3+async-validator如何实现表单验证
  • 829
分享到

vue3+async-validator如何实现表单验证

2023-07-02 08:07:58 829人浏览 泡泡鱼
摘要

本篇内容主要讲解“vue3+async-validator如何实现表单验证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue3+async-validator如何实现表单验证”吧!搭建vue3

本篇内容主要讲解“vue3+async-validator如何实现表单验证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Vue3+async-validator如何实现表单验证”吧!

    搭建vue3的项目

    创建项目前 这里我们首先要说明的是,我们使用的版本情况

    • nodejs:v17.5.0

    • pnpm:7.0.0

    • Vue:3.2.25

    首先我们 Vite 创建一个 vue3 的项目demo,名字就叫 FormValidate, 我们在命令行输入命令

    pnpm create vite FORMValidate 回车

    然后选择 vue

    继续回车,说明我们已经初步创建了 FormValidate (表单验证)项目

    根据命令行的提示,我们进入项目根目录,然后使用命令 pnpm install 安装项目需要的依赖,当然这里使用 pnpm 是比 npm 或者 yarn 快很多的。

    接着,我们启动项目 pnpm run dev, 终端中输出如图内容

     vite v2.9.7 dev server running at:  > Local: Http://localhost:3000/  > Network: use `--host` to expose  ready in 954ms.

    启动浏览起,输入地址 http://localhost:3000/

    ok, 到这里我们已经把项目搭建起来了,结下来我们就开始来说说我们今天主题-表单验证

    vue3的表单验证

    这里我们使用 async-validator 这是个异步验证表单的插件,在GitHub上有 5k+ 的star,使用的也很广泛,比如 Ant.designElement UINaive UI 等都在使用这个插件,甚至与有些nodejs后端项目也在使用这个。

    先安装一下这个插件,在命令行输入

    pnpm install async-validator

    这里 async-validator 版本是 4.1.1

    1.表单代码

    打开项目中的 App.vue 文件,删除多余的文件内容,输入标题 vue3 表单验证,并添加一些初始代码

    <template>    <div class="main">        <h4>vue3 表单验证</h4>        <form>            <div>                <label class="label">账号</label>                <input  type="text"  placeholder="请输入账号" class="input" />            </div>            <div>                <label class="label">密码</label>                <input  tyep="passWord" type="text" class="input"  placeholder="请输入密码"  />            </div>            <div>                <button>保存</button>            </div>        </form>    </div></template><script setup></script><style lang="CSS">.main{    text-align:center;}.label {    padding-right: 10px;    padding-left: 10px;    display: inline-block;    box-sizing: border-box;    width: 100px;    text-align: right;}.input {    width: 200px;    height: 30px;    margin-top:10px;}</style>

    是不是看起来有点丑,别急,我们加点css代码,简单的美化一下

    <template>    <div class="main">        <h4>Vue3表单验证</h4>        <form class="form-box">            <div class="form-group ">                <label class="label">账号</label>                <input type="text" class="input" placeholder="请输入账号"  />            </div>            <div class="form-group">                <label class="label">密码</label>                <input  tyep="password" type="text"  placeholder="请输入密码" class="input" />            </div>            <div class="form-group">                <button class="btn ">保存</button>            </div>        </form>    </div></template><script setup></script><style scoped>.main {    text-align: center;}.btn{    margin: 0;    line-height: 1;    padding: 15px;    height: 30px;    width: 60px;    font-size: 14px;    border-radius: 4px;    color: #fff;    background-color: #2080f0;    white-space: nowrap;    outline: none;    position: relative;    border: none;    display: inline-flex;    flex-wrap: nowrap;    flex-shrink: 0;    align-items: center;    justify-content: center;    user-select: none;    text-align: center;    cursor: pointer;    text-decoration: none;}.form-box{    width: 500px;    max-width: 100%;    margin: 0 auto;    padding: 10px;}.form-group{    margin: 10px;    padding: 10px 15px 10px 0}.label {    padding-right: 10px;    padding-left: 10px;    display: inline-block;    box-sizing: border-box;    width: 110px;    text-align: right;}.input {    width: calc(100% - 120px);    height: 28px;}</style>

    2.添加验证

    2-1. 初始化

    引入ref 属性和 async-validator,这里我们给每个 input 框添加 v-model 绑定属性,

    // html<input type="text" v-model="form.account" class="input" placeholder="请输入账号"  /><input  tyep="password" v-model="form.password" type="text"  placeholder="请输入密码" class="input" />// scriptimport { ref } from "vue"import Schema from 'async-validator';const form = ref({    account: null,    password: null,})

    根据表单的情况,我们定义一个对象,这个对象里面存储了需要校验的对象和校验不通过时的信息

    const rules = {    account: { required: true, message: '请输入账号' },    password: { required: true, message: '请输入密码' }}

    实例化 Schema, 将 rules 传入 Schema,得到一个 validator

    const validator = new Schema(rules)

    验证单个表单我们使用 失去焦点事件, 定义一个函数,将这个函数添加到 account input上的失焦事件上

    // html<input v-model="account" type="text" class="input" @blur="handleBlurAccount" placeholder="请输入账号"  />// scriptconst handleBlurAccount = () => {}

    接着将实例化后的校验器函数写到 handleBlurAccount 中

    const handleBlurAccount = () => {    validator.validate({account: form.value.account}, (errors, fields) => {        if (errors && fields.account) {            console.log(fields.account[0].message);            return errors        }    })}

    在account 的 input 中测试,我们可以看到在控制台打印出了 请输入账号 等字

    同样的,我们给密码框也添加如下代码

    //html<input v-model="form.password" tyep="password" type="text" @blur="handleBlurPassword"  placeholder="请输入密码" class="input" />//scriptconst handleBlurPassword = () => {    validator.validate({password: form.value.password}, (errors, fields) => {        if (errors && fields.password) {            console.log(errors, fields);            console.log(fields.password[0].message);            return errors        }    })}
    2-2. 多个表单的验证

    当然这里校验的只是单个input的,我们接下来说说多个表单的校验,定义一个点击事件为submit,将submit事件添加到button上,当然不要忘记阻止浏览器默认事件

    const submit = (e) => {    e.preventDefault();    validator.validate(form.value, (errors, fields) => {        if (errors) {            for(let key of errors) {                console.log(key.message);            }            return errors        }    })}
    2-3. Promise方式验证

    了上面的方式,async-validator 还提供 Promise 的方式,我们把 submit 函数中的代码修改为如下

    validator.validate(form.value).then((value) => {        // 校验通过        console.log(value);}).catch(({ errors, fields }) => {    console.log(errors);    return errors})

    点击保存,同样的,我们可以看到控制台已经打印了错误信息,说明我们写的是合适的

    vue3+async-validator如何实现表单验证

    2-4. 正则验证

    当然有时候我们会输入邮箱,电话号码等表单,这时候我们就需要添加正则来进行验证了,我们先添加两个表单,并添加失焦事件, 正则验证需要用到 async-validator 的属性 pattern,我们将符合要求的正则添加到 rules ,代码如下所示

    <div class="form-group ">    <label class="label">电话号码</label>    <input v-model="form.phone" type="text" class="input" @blur="handleBlurPhone"                    placeholder="请输入电话号码" /></div><div class="form-group ">    <label class="label">邮箱</label>    <input v-model="form.email" type="text" class="input" @blur="handleBlurEmail"                    placeholder="请输入邮箱" /></div>const form = ref({    account: null,    email: null,    password: null,})const rules = {    account: { required: true, message: '请输入账号' },    phone: {        required: true,        pattern: /^1\d{10}$/,        message: "请输入电话号码"    },    email: {        required: true,        pattern: /^([a-zA-Z0-9]+[_|_|\-|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,6}$/,        message: "请输入邮箱"    },    password: { required: true, message: '请输入密码' }}const handleBlurPhone = () => {    validator.validate({ phone: form.value.phone }, (errors, fields) => {        if (errors && fields.phone) {            console.log(errors, fields);            console.log(fields.phone[0].message);            return errors        }    })}const handleBlurEmail = () => {    validator.validate({ email: form.value.email }, (errors, fields) => {        if (errors && fields.email) {            console.log(errors, fields);            console.log(fields.email[0].message);            return errors        }    })}

    当然,测试是没有问题的

    2-5. 长度控制

    假如你要控制表单输入内容的长度,可以使用属性 min 和 max,我们用 account 这个表单作为例子,我们 rules 对象的 account 中添加这两个属性,比如要求账号最少5个字符,最多10个字符,如下

    account: { required: true, min:5, max:10, message: '请输入账号' }

    我们还可以使用 input 的原生属性 maxLength="10" 来控制用户的输入

    2-6. 多个验证条件

    当我们有多个验证条件的时候,我们可以把 rules 的验证条件写成一个数组,我们还是用 account 这个表单作为例子,比如 账号要求必须用中文,且账号最少5个字符,最多10个字符,代码如下

    account: [    { required: true, min:5, max:10, message: '请输入账号' },    { required: true, pattern: /[\u4e00-\u9fa5]/, message: '请输入中文账号' }],
    2-5. 自定义验证

    有时候,我们会有使用自定义验证函数的情况,以满足特殊验证情况,这时候,我们可以这样做

    field:{    required: true,    validator(rule, value, callback){      return value === '';    },    message: '值不等于 "".',}

    到这里,vue3的表单验证功能雏形已经基本出来了,下面我们对验证功能进行完善

    3.优化完善

    之前的表单验证虽然已经做出了,但是校验的提示信息是在控制台,这个很不友好,用户也看不到提示,所以这里我们完善下这部分功能

    首先我们在 label 边加一个 "*" 表示必填,并且添加样式,给一个红色,醒目一些

    <label class="label">    <span>账号</span>    <span class="asterisk"> *</span></label>.asterisk{    color: #d03050;}

    我们考虑到 rules 对象中 required 属性的作用,这里使用 vue 的条件判断语句 v-if 来判断,先定义一个函数,名字就叫 getRequired,然后将 rules.account,作为参数传进去,这里要重点说明一下,如果考虑封装验证方法,这里可以不用传参,不多说,后面讲到了,我们再说,先看代码

     <span class="asterisk" v-if="getRequired(rules.account)"> *</span>const getRequired = (condition) => {    if(Object.prototype.toString.call(condition) === "[object Object]") {        return condition.required    } else if (Object.prototype.toString.call(condition) === "[object Array]") {        let result = condition.some(item => item.required)        return result    }    return false}

    因为 rules.account, 有可能是对象或者数组,这里我们加一个判断区别下,如果传递进来的是对象,我们直接将属性required返回回去,至于required属性是否存在,这里没有必要多判断。 如果传递进来的是数组,我们使用 some 函数获取下结果,然后再返回.

    修改 rules.accountrequired 值为false,星号消失,这里只要有一个required 值为true,那么这个星号就显示

    我们接着来添加错误信息的显示与隐藏

    我们定义一个对象 modelControl,这个对象里面动态存储错误信息,

    const modelControl = ref({})

    接着给 accountinput 框添加一个自定义属性 prop, 属性值是 account, 再加一个div显示错误提示信息

    <div class="form-group">    <label class="label">        <span>账号</span>        <span class="asterisk" v-if="getRequired(rules.account)"> *</span>    </label>    <input v-model="form.account" type="text" maxLength="10" class="input" prop="account" @blur="handleBlurAccount" placeholder="请输入账号" />    <div class="input feedback" v-if="modelControl['account']">{{modelControl['account']}}</div></div>.feedback{    color: #d03050;    font-size:14px;    margin-top: 3px;    text-align:left;    margin-left:110px;}

    为了动态的显示和隐藏错误信息,我们需要修改失焦事件 和 submit 事件,在事件执行的时候,动态的将值赋予或清除,代码如下

    const handleBlurAccount = (e) => {    const prop = e.target.attributes.prop.value    if (!prop) {        return false    }    validator.validate({ account: form.value.account }, (errors, fields) => {        if (errors && fields.account) {            console.log(errors, fields);            console.log(fields.account[0].message);            modelControl.value[prop] = fields[prop][0].message            return errors        }        modelControl.value[prop] = null    })}validator.validate(form.value).then((value) => {        // 校验通过    console.log(value);}).catch(({ errors, fields }) => {    console.log(errors, fields);    for(let key in fields) {        modelControl.value[key] = fields[key][0].message    }    console.log(modelControl);    return errors})

    到这里 表单的动态验证功能基本算是完成了,但是我们发现,每次错误信息的展示都会使得input框跳动,所以还得调整下样式

    .form-group {    margin: 2px;    padding: 10px 15px 3px 0;    height:57px;    transition: color .3s ease;}

    到此,相信大家对“vue3+async-validator如何实现表单验证”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: vue3+async-validator如何实现表单验证

    本文链接: https://www.lsjlt.com/news/340525.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • vue3+async-validator如何实现表单验证
      本篇内容主要讲解“vue3+async-validator如何实现表单验证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue3+async-validator如何实现表单验证”吧!搭建vue3...
      99+
      2023-07-02
    • vue3 + async-validator实现表单验证的示例代码
      目录vue3 表单验证前言搭建vue3的项目vue3的表单验证1.表单代码2.添加验证2-1. 初始化2-2. 多个表单的验证2-3. Promise方式验证2-4. 正则验证2-5...
      99+
      2024-04-02
    • React中如何使用async validator进行表单验证
      这篇文章主要为大家展示了“React中如何使用async validator进行表单验证”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“React中如何使用asy...
      99+
      2024-04-02
    • vue+vue-validator如何实现表单验证功能
      这篇文章主要为大家展示了“vue+vue-validator如何实现表单验证功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue+vue-validator...
      99+
      2024-04-02
    • vue表单验证rules及validator验证器如何使用
      这篇文章主要介绍“vue表单验证rules及validator验证器如何使用”,在日常操作中,相信很多人在vue表单验证rules及validator验证器如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
      99+
      2023-07-02
    • vue+vue validator怎么实现表单验证功能
      今天小编给大家分享一下vue+vue validator怎么实现表单验证功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所...
      99+
      2024-04-02
    • Vue中如何使用Validator表单验证插件
      这期内容当中小编将会给大家带来有关Vue中如何使用Validator表单验证插件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。基本使用<div id=&q...
      99+
      2024-04-02
    • Vue3实现登录表单验证功能
      目录一.实现思路与效果图二.实现具体过程三.完整代码与效果图一.实现思路与效果图 使用async-validator 插件,阿里出品的 antd 和 ElementUI 组件库中表单...
      99+
      2024-04-02
    • layui如何实现表单验证
      这篇文章主要介绍layui如何实现表单验证,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在网上看到很多validform和layer配合的验证方式,但是觉得写的不好,不清不楚的,于是...
      99+
      2024-04-02
    • bootstrap+Validator如何实现模态框、jsp、表单验证 Ajax提交功能
      这篇文章主要介绍bootstrap+Validator如何实现模态框、jsp、表单验证 Ajax提交功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图:如图,这是使用Valid...
      99+
      2024-04-02
    • 如何实现JS表单验证
      这篇文章主要介绍了如何实现JS表单验证,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先晒图index.html<!DOCTYPE&nb...
      99+
      2024-04-02
    • html5如何实现表单验证
      这篇文章主要介绍html5如何实现表单验证,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在深人探讨表单验证之前,让我们先思考一下表单验证的真实含义。就其核心而言,表单验证是一套系统,...
      99+
      2024-04-02
    • jQuery如何实现表单验证
      这篇文章主要为大家展示了“jQuery如何实现表单验证”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jQuery如何实现表单验证”这篇文章吧。具体代码如下所示:...
      99+
      2024-04-02
    • vue表单验证rules及validator验证器的使用方法实例
      目录前言表单验证rules自定义校验规则总结前言 为防止用户犯错,尽可能更早地发现并纠正错误。 Element中Form (表单)组件提供了表单验证的功能,只需要通过 rules 属...
      99+
      2024-04-02
    • Vue Validator表单验证插件怎么使用
      这篇“Vue Validator表单验证插件怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue Validator...
      99+
      2023-07-04
    • vue3+vite3+typescript实现验证码功能及表单验证效果
      目录验证码组件父组件表单验证最终效果验证码组件 <template> <div class="captcha" style="display: flex;"&...
      99+
      2023-05-16
      vue3+vite3+typescript验证码 vue3+vite3+typescript表单验证
    • Javascript中如何实现表单验证
      本篇文章为大家展示了Javascript中如何实现表单验证,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 检查一段字符串是否全由数字组成: ﹤ scr...
      99+
      2024-04-02
    • vue3实现H5表单验证组件的示例
      目录效果图描述实现思路与element-ui表单组件差异非uni-app平台的移植效果图 描述 基于vue.js,不依赖其他插件或库实现;基础功能使用保持和 element-ui ...
      99+
      2023-05-16
      vue3 H5表单验证 vue3 表单验证
    • 如何用JavaScript实现表单验证
      这篇“如何用JavaScript实现表单验证”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何用JavaScript实现表单...
      99+
      2023-06-30
    • jQuery中Validator如何验证Ajax提交表单和Ajax传参
      这篇文章将为大家详细讲解有关jQuery中Validator如何验证Ajax提交表单和Ajax传参,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。serialize() 方...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作