前端利器 · 一文读懂 Vue Element UI VeeValidate 全局 表单验证 封装 (详细教程)


一篇学会 veevalidate 表单验证


文章解析

前端开发 表单验证 必不可少 本文章讲解 VeeValidate 表单验证封装 实现 全局表单验证

网络上 有关 veevalidate 最新版例子少之又少,本文章基于最新版本 veevalidate 进行详细解析
对近期接触的表单验证框架做相关评价


Element UI 和 VeeValidate 对比

Element UI Vue 开发比较好用的UI框架
Element UI: 自带了 表单验证功能,使得页面样式、表单验证 一体化、实现高效前端开发
在多个字段名相同情况下可以实现 快速开发 重复使用
缺点:新字段需要 增加新规则 ,不适于封装,页面代码比较繁琐

VeeValidate:自定义规则,全局任意使用
缺点: 需要手动 配置文件


实现思路

在这里插入图片描述

Element UI 表单样式
VeeValidate 表单验证 表单清空

vee validate 不同版本使用教程不同 本文章 使用 3.2.5 版本


封装步骤


安装veevalidate

yarn
yarn add vee-validate

#npm
npm install vee-validate --save

#CDN
<!-- jsdelivr cdn -->
<script src="https://cdn.jsdelivr.net/npm/vee-validate@latest/dist/vee-validate.js"></script>

<!-- unpkg -->
<script src="https://unpkg.com/vee-validate@latest"></script>

创建 veevalidate.js

veevalidate 文件 包含 veevalidate 表单验证 必要 文件

/* Vee Validate*/
import Vue from 'vue'

import {ValidationProvider, ValidationObserver} from 'vee-validate' 

//导入校验规则
import '../config/validation'

/*配置全局组件 ValidationProvider ValidationObserver*/
Vue.component('ValidationProvider', ValidationProvider)
Vue.component('ValidationObserver', ValidationObserver) 

/*配置全局表单清空方法*/

Vue.prototype.$validatereset = validatereset

function validatereset (formName) {
  // Wait until the models are updated in the UI
  this.$nextTick(() => {
    /* js 清空标签内容 */
    $(`.${formName}`).find('input,select,textarea').each(function () {
      $(this).val('')
    })
  })
}

代码解析


使用ValidationProvider来验证输入字段
ValidationObserver,就像其名称所暗示的那样,它观察其中的字段的验证状态

可以理解为
ValidationProvider组件为单个字段
ValidationObserver充当其子提供者或扩展它们的任何组件的聚合器


创建 自定义 校验规则文件 validation.js

/*导入 Vee Validate 规则组件*/
import {extend} from 'vee-validate'

/*大于0*/
extend('positive', value => {
  if (value >= 0) {
    return true
  }
  return '长度不匹配'
})

/*在字符串中使用占位符,它将自动用您的字段名称替换:
* _field_	字段名称  name="标题"。
_value_	验证的字段值。
_rule_	触发此消息的规则名称。
* */

/*非空验证*/
extend('require', {
    validate (value) {
      /*判断是否存在空格*/
      if (value.split(' ').join('').length != 0 && value != '' && value != null && value != undefined && value.indexOf(value) !== -1) {
        return true
      }
      return `{_field_} 不能为空`
    },
    computesRequired: true,
  }
)

/*最小长度*/
extend('min', {
  validate (value, args) {
    return value.length >= args.length
  },
  params: ['length']
})

/*最小长度到最大长度*/
extend('minmax', {
  validate (value, args) {
    const length = value.length
    if (length >= args.min && length <= args.max) {
      return true
    }
    return `字段长度不匹配, {_field_} 长度必须在{min}-{max}之间`
  },
  /*获取多个参数 例:rules="minmax:1,6"*/
  params: ['min', 'max']
})

/*该规则检查指定值是否在定义的集合内
* rules="one_of:1,2,3,4,5,6,7,8,9"
* */
extend('one_of', (value, values) => {
  return values.indexOf(value) !== -1
})

也可以导入官方 验证规则 官网验证规则 为 英文
导入指定规则

import { extend } from 'vee-validate';
import { required, email } from 'vee-validate/dist/rules';

extend('email', email);
extend('required', required);

安装所有规则

import * as rules from 'vee-validate/dist/rules';

Object.keys(rules).forEach(rule => {
  extend(rule, rules[rule]);
});

main.js 入口引入

import '../config/veevalidate'

Veevalidate 实例

Template

<template>
  <div>
    <ValidationObserver ref="LoginForm">
      <!--class 与  ref 名一致 用于 表单验证 清空-->
      <el-form class="LoginForm" style="width: 500px;height: 300px;margin:200px auto">
      
        <h2 class="font-weight-bolder medium mb-5">Element UI VeeValidate 表单验证</h2>
        <!-- rules 验证规则 v-slot 插入错误 name 用于使用{_fied_} 获取字段信息
        <ValidationProvider name="用户名" rules="require" v-slot="{ errors }">
          <el-form-item label="用户名">
            <el-input v-model="user.name" style="width: 200px;"/>
            
            <!--错误可以定义多个 {{errors[0]}} 显示第一个错误 -->
            <span class="text-danger">{{errors[0]}}</span>
          </el-form-item>
        </ValidationProvider>
        
        <ValidationProvider name="密码" rules="require|minmax:3,15" v-slot="{ errors }">
          <el-form-item label="密码">
            <el-input v-model="user.password" style="width: 200px;"/>
            <span class="text-danger">{{errors[0]}}</span>
          </el-form-item>
        </ValidationProvider>
        
        <ValidationProvider name="简介" rules="require|minmax:10,150" v-slot="{ errors }">
          <el-form-item label="简介">
            <el-input
              type="textarea"
              style="width: 300px"
              :autosize="{ minRows: 2, maxRows: 4}"
              placeholder="请输入内容"
              v-model="user.desc">
            </el-input>
            <span class="text-danger">{{errors[0]}}</span>
          </el-form-item>
          
        </ValidationProvider>
        
        <el-button @click="onSubmit('LoginForm')">提交</el-button>
        
      </el-form>
    </ValidationObserver>
  </div>
</template>

Script

<script>

  export default {
    name: 'Login',
    data () {
      return {
        user: {
          name: '',
          password: '',
          desc: ''
        }
      }
    }, methods: {
      onSubmit (formName) {
      //validate是vee-validate提供的核心功能之一,它允许您运行任意异步验证
        this.$refs[formName].validate().then(success => {
          if (!success) {
            return false
          } else {
            /*清空表单*/
            this.$validatereset(formName)
          }
        })
      }
    }
  }
</script>

本文未经授权不得转载

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue 是一个流行的 JavaScript 框架,用于构建用户界面和单页面应用程序。Element UI 是一个基于 Vue.js 的组件库,提供了丰富的 UI 组件和工具。在 Vue 中使用 Element UI 构建表单,可以通过循环来动态生成表单项并进行验证。 首先,我们可以使用 Vue 的 v-for 指令来循环渲染表单项。通过遍历数据源(如数组或对象)来动态生成表单字段,例如输入框、下拉框、复选框等。这样就可以实现根据数据源的变化而动态生成不同数量的表单项,方便灵活地管理表单内容。 其次,通过 Element UI 提供的验证规则和验证器,可以实现对表单的循环验证。我们可以为每个表单项设置相应的验证规则(如必填、格式验证等),并通过验证器对整个表单进行验证。在循环中,可以动态添加、修改或删除验证规则,以实现对动态生成的表单项的实时验证。 另外,可以利用 Element UI 提供的表单组件和事件处理机制来实现更进一步的表单循环验证。例如,可以监听表单项的输入变化、聚焦和失焦事件,在相应的事件处理函数中进行数据的验证和反馈。这样就可以及时提示用户输入的正确与否,提升用户体验。 总之,使用 VueElement UI 可以很容易地实现表单的循环验证。通过动态生成表单项、设置验证规则和事件处理,可以灵活地管理和验证表单数据,提供更好的用户交互体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值