当前位置: 首页 > article >正文

vue3使用vee-validate自定义表单校验,提交实现步骤

1、首先安装vee-validate(指定版本),安装命令如下:

npm i vee-validate@4.0.3

2、在app.vue中写入如下内容:用vee-validate提供的Form组件代替form标签,用Field组件代替input标签,errors是接收校验的错误信息放在v-slot中,errors的键其实就是form中的键,值就是TRUE和FALSE

<template>
  <Form ref="formCom" class="form" :validation-schema="MySchema" v-slot="{errors}" autocomplete="off">
      <div class="form-item">
        <div class="input">
          <Field :class="{error:errors.account}" v-model="form.account" name="account" type="text" placeholder="请输入用户名" ></Field>
        </div>
        <div class="error" v-if="errors.account">
          {{errors.account}}
        </div>
      </div>
      <div class="form-item">
        <div class="input">
          <Field :class="{error:errors.password}" v-model="form.password" name="password" type="password" placeholder="请输入密码" />
        </div>
        <div class="error" v-if="errors.password">
          {{errors.password}}
        </div>
      </div>
    <a @click="login" href="javascript:;" class="btn">重置</a>
  </Form>
</template>

<!--script 没用直接使用setup的一种实现方式-->
<!--<script >-->
<!--import schema from './validate-schema'-->
<!--import { Form, Field } from 'vee-validate'-->
<!--import { reactive, ref} from "vue";-->
<!--export default {-->
<!--  components:{Form, Field},-->
<!--  setup(){-->
<!--    const formCom = ref(null)-->

<!--    const form = reactive({-->
<!--      account: null,-->
<!--      password: null,-->
<!--    })-->
<!--    const MySchema = {-->
<!--      // 校验函数规则:返回true就是校验成功,返回一个字符串就是失败,字符串就是错误提示-->
<!--      account: schema.account,-->
<!--      password: schema.password,-->
<!--    }-->

<!--    const login = ()=>{-->
<!--      form.account = null-->
<!--      form.password = null-->
<!--      formCom.value.resetForm()-->
<!--    }-->

<!--    return {login, form, MySchema, formCom}-->
<!--  },-->
<!--}-->
<!--</script>-->

<!--直接是用setup的一种使用方式-->
<script setup>
import schema from './validate-schema'
import { Form, Field } from 'vee-validate'
import { reactive, ref} from "vue";
const formCom = ref(null)

const form = reactive({
  account: null,
  password: null,
})
const MySchema = {
  // 校验函数规则:返回true就是校验成功,返回一个字符串就是失败,字符串就是错误提示
  account: schema.account,
  password: schema.password,
}

const login = ()=>{
  form.account = null
  form.password = null
  formCom.value.resetForm()
}

</script>

<style lang="less" scoped>
.form{
  margin-left: 20px;
  .form-item{
    height: 70px;
    box-sizing: border-box;
    .input{
      width: 300px;
      //text-align: center;
      line-height: 40px;
      height: 40px;
      box-sizing: border-box;
      margin-bottom: 5px;
      input{
        height: 100%;
        border: 1px solid black;
      }
    }
  }


  .error{
    color: red;
    //margin-top: 2px;
  }
}
</style>

这里边有个特别需要注意的是重置按钮点击后在formCom.value.resetForm()之前要先清空form表单,否则感觉resetForm()无效

3、新建一个叫validate-schema.js作为表单验证,其内容如下:

// 定义校验规则提供给vee-validate组件使用
export default {
    // 校验account
    account (value) {
        // value是将来使用该规则的表单元素的值
        // 1. 必填
        // 2. 6-20个字符,需要以字母开头
        // 如何反馈校验成功还是失败,返回true才是成功,其他情况失败,返回失败原因。
        if (!value) return '请输入用户名'
        if (!/^[a-zA-Z]\w{5,19}$/.test(value)) return '字母开头且6-20个字符'
        return true
    },
    password (value) {
        if (!value) return '请输入密码'
        if (!/^\w{6,24}$/.test(value)) return '密码是6-24个字符'
        return true
    },
    mobile (value) {
        if (!value) return '请输入手机号'
        if (!/^1[3-9]\d{9}$/.test(value)) return '手机号格式错误'
        return true
    },
    code (value) {
        if (!value) return '请输入验证码'
        if (!/^\d{6}$/.test(value)) return '验证码是6个数字'
        return true
    },
    isAgree (value) {
        if (!value) return '请勾选同意用户协议'
        return true
    }
}

4、效果如下:

在这里插入图片描述


http://www.kler.cn/a/2093.html

相关文章:

  • springboot460实习生管理系统设计和实现(论文+源码)_kaic
  • 【1.排序】
  • 深入浅出支持向量机(SVM)
  • Layui table不使用url属性结合laypage组件实现动态分页
  • 7-2 排序
  • aioice里面candidate固定UDP端口测试
  • 收到6家大厂offer,我把问烂了的《Java八股文》打造成3个文档。共1700页!!
  • Java之类与对象(图文结合)
  • C++实现通讯录管理系统
  • async与await异步编程
  • WPF 认识WPF
  • Mybatis的多表操作
  • unity3d游戏运行时lua热重载
  • Kaggle实战入门:泰坦尼克号生还预测(进阶版)
  • Qt cmake 资源文件的加载
  • LeetCode:27. 移除元素
  • ini配置文件
  • Boosting(XGBoost、LightGBM以及CatBoost)
  • 栈、队列、优先级队列的模拟实现
  • 【计算机组成原理】:计算机系统概述
  • 鸟哥的Linux私房菜 Shell脚本
  • 【Leetcode】队列实现栈和栈实现队列
  • 【三维几何学习】从零开始网格上的深度学习-3:Transformer篇(Pytorch)
  • 【Zabbix实战之部署篇】docker部署Zabbix+grafana监控平台
  • 【C++初阶】四、类和对象(下)
  • 沁恒CH32V307使用记录:使用TIM输出PWM信号