element多个表单校验的实现

我们来详细讲解一下如何通过element实现多个表单校验。

确定要校验的表单

首先,需要确定需要进行校验的表单。可以根据业务需求,选择需要进行校验的表单元素。例如,我们需要对登录表单的“用户名”和“密码”两个表单元素进行校验。

导入element UI

接下来,引入element UI的表单校验组件。在Vue.js项目中,通常可以在main.js文件中引入element UI,示例如下:

// main.js
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)

构建校验规则对象

要对表单进行校验,需要定义校验规则。校验规则以对象的形式存在,规则对象定义的属性名需要与表单元素的v-model绑定的属性名相同。我们以“用户名”为例,定义相应的规则对象:

//校验规则对象
const rulesObj = {
  username: [
    { required: true, message: '请填写用户名', trigger: 'blur' },
    { min: 3, max: 12, message: '用户名长度在3~12个字符之间', trigger: 'blur' }
  ],
  password: [
    { required: true, message: '请填写密码', trigger: 'blur' },
    { min: 6, max: 20, message: '密码长度在6~20个字符之间', trigger: 'blur' }
  ]
};

该规则对象中,usernamepassword分别对应了用户名和密码两个表单元素的v-model绑定的属性名。rulesObj中定义的每个属性名的值是一个数组,包含了对应表单元素需要校验的规则。

将校验规则对象传递给表单元素

构建好校验规则对象后,将校验规则对象赋给需要进行校验的表单元素。我们以element UI中的el-form表单组件为例。

<el-form ref="form" :model="form" :rules="rules">
  <el-form-item label="用户名" prop="username">
    <el-input v-model="form.username"></el-input>
  </el-form-item>
  <el-form-item label="密码" prop="password">
    <el-input type="password" v-model="form.password"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="handleSubmit">登录</el-button>
  </el-form-item>
</el-form>

在上述HTML代码中,:rules绑定了校验规则对象,每个<el-form-item>元素中使用prop绑定了该表单元素要校验的规则属性名。这里,用户名对应的prop属性为username,密码对应的prop属性为password

编写表单提交处理函数

当用户提交表单时,需要进行表单校验。为了实现表单的提交功能,我们需要在Vue中编写一个表单提交处理函数。该函数中,使用this.$refs.name.validate()方法进行表单校验。如果校验通过,则继续执行提交表单的操作。

methods: {
  handleSubmit() {
    this.$refs.form.validate(valid => {
      if (valid) {
        //此处为表单提交的操作
        ...
      } else {
        this.$message.error('表单校验不通过')
      }
    })
  }
}

在上述代码中,使用this.$refs.form.validate()方法进行表单校验。validate()方法返回一个布尔值,表示表单是否通过校验。如果校验失败,则使用this.$message.error()方法提示用户表单校验不通过。

示例1:校验表单元素的相等性

我们可以通过自定义校验规则的方式,来对表单元素进行相等性校验。例如,校验两个密码输入框的值是否相同。

我们在校验规则对象rulesObj中,新增一个属性password2,表示第二个密码输入框需要校验的规则。

//校验规则对象
const rulesObj = {
  username: [
    { required: true, message: '请填写用户名', trigger: 'blur' },
    { min: 3, max: 12, message: '用户名长度在3~12个字符之间', trigger: 'blur' }
  ],
  password: [
    { required: true, message: '请填写密码', trigger: 'blur' },
    { min: 6, max: 20, message: '密码长度在6~20个字符之间', trigger: 'blur' }
  ],
  password2: [
    { required: true, message: '请再次输入密码', trigger: 'blur' },
    { validator: (rule, value, callback) => {
      if (value === '') {
        callback(new Error('请确认密码'))
      } else if (value !== this.form.password) {
        callback(new Error('两次密码输入不一致'))
      } else {
        callback()
      }
    } }
  ]
};

在规则对象中,password2规则属性包含了两个校验规则。第二个密码输入框需要输入的值,在提交时将随表单一起提交。表单中第一个密码输入框的值则通过this.form.password获取。

接下来,将需要进行校验的表单元素绑定该规则,<el-input>组件中的v-model属性绑定了表单元素需要校验的规则属性名。

<el-form ref="form" :model="form" :rules="rules">
  <el-form-item label="用户名" prop="username">
    <el-input v-model="form.username"></el-input>
  </el-form-item>
  <el-form-item label="密码" prop="password">
    <el-input type="password" v-model="form.password"></el-input>
  </el-form-item>
  <el-form-item label="确认密码" prop="password2">
    <el-input type="password" v-model="form.password2"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="handleSubmit">登录</el-button>
  </el-form-item>
</el-form>

使用validator自定义校验规则,并在规则中校验两个密码输入框的值是否相同。如果不相同,则使用callback(new Error('两次密码输入不一致'))方法提示用户两次密码输入不一致。

示例2:异步校验

除了对表单元素进行同步校验,我们还可以对表单元素进行异步校验,例如:校验用户名是否重复。

假设我们的后端API接口地址为/api/checkUsername,该接口需要传递一个参数username,表示要检查的用户名,如果该用户名已存在,则返回失败,否则返回成功。

我们在校验规则对象rulesObj中,新增一个属性username2,表示第二个用户名输入框需要校验的规则。

//校验规则对象
const rulesObj = {
  username: [
    { required: true, message: '请填写用户名', trigger: 'blur' },
    { min: 3, max: 12, message: '用户名长度在3~12个字符之间', trigger: 'blur' }
  ],
  password: [
    { required: true, message: '请填写密码', trigger: 'blur' },
    { min: 6, max: 20, message: '密码长度在6~20个字符之间', trigger: 'blur' }
  ],
  username2: [
    { required: true, message: '请填写用户名', trigger: 'blur' },
    { min: 3, max: 12, message: '用户名长度在3~12个字符之间', trigger: 'blur' },
    //异步校验
    { validator: (rule, value, callback) => {
      setTimeout(() => {
        if (value === 'admin') {
          callback(new Error('该用户名已存在'))
        } else {
          callback()
        }
      }, 1000)
    }, trigger: 'blur' }
  ]
};

在规则对象中,username2规则属性需要进行异步校验,使用setTimeout()模拟一个异步请求,1秒钟后返回成功或失败结果,调用相应的callback方法。

接下来,将需要进行校验的表单元素绑定该规则,<el-input>组件中的v-model属性绑定了表单元素需要校验的规则属性名。

<el-form ref="form" :model="form" :rules="rules">
  <el-form-item label="用户名" prop="username">
    <el-input v-model="form.username"></el-input>
  </el-form-item>
  <el-form-item label="密码" prop="password">
    <el-input type="password" v-model="form.password"></el-input>
  </el-form-item>
  <el-form-item label="确认密码" prop="password2">
    <el-input type="password" v-model="form.password2"></el-input>
  </el-form-item>
  <el-form-item label="用户名2" prop="username2">
    <el-input v-model="form.username2"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="handleSubmit">登录</el-button>
  </el-form-item>
</el-form>

使用validator自定义异步校验规则,模拟异步请求,1秒钟后返回成功或失败结果。

总结

通过上述步骤,就可以实现对多个表单元素进行校验的功能。其中,通过定义校验规则对象,对同步和异步校验规则进行定义,并将校验规则对象绑定到表单元素上。在表单提交处理函数中,使用validate()方法对表单进行校验,并根据校验结果进行处理。除了以上两个示例,我们还可以根据业务需求定义更多的校验规则,实现表单的自定制和扩展。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:element多个表单校验的实现 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • Javascript window对象详解

    Javascript window对象详解 window对象是JavaScript中的全局对象,它代表浏览器窗口或标签页。在网页中,我们经常使用window对象来操作浏览器窗口、加载新的文档等。 获取窗口的大小和位置 要获取窗口的大小和位置,我们可以使用window.innerWidth、window.innerHeight、window.outerWidt…

    JavaScript 2023年5月27日
    00
  • Javascript Date getUTCDay() 方法

    JavaScript 中的 getUTCDay() 方法用于获取 Date 对象中的星期几,以 UTC 时间为准。在本教程中,我们将详细介绍 getUTCDay() 方法的使用方法。 getUTCDay() 方法的基本语法如下: date.getUTCDay() 其中,date 是要获取星期几的 Date 对象。 以下两个示例说明: 示例一:使用 getUT…

    JavaScript 2023年5月11日
    00
  • vue element-ui实现动态面包屑导航

    一、概述 面包屑导航是指网站或应用程序主导航之外的一种辅助性导航元素。随着单页应用(SPA)的普及,动态面包屑导航也变得越来越常见。Vue Element-UI提供了很好的组件支持,可以轻松实现动态面包屑导航的功能。 二、步骤 安装Vue和Element-UI 在Vue Element-UI中使用动态面包屑导航功能,需要先安装Vue和Element-UI。可…

    JavaScript 2023年6月10日
    00
  • javaScript基础详解

    JavaScript基础详解攻略 简介 JavaScript是一种Web前端编程语言,常用于给网页添加动态功能、实现交互效果。了解JavaScript基础知识是学习Web前端开发的重要第一步。 本攻略将详细介绍JavaScript基础知识,包括数据类型、运算、表达式、流程控制、函数等方面。在介绍的过程中将附有多个实例说明。 数据类型 JavaScript支持…

    JavaScript 2023年5月17日
    00
  • 图解JavaScript作用域链底层原理

    下面就为大家讲解一下“图解JavaScript作用域链底层原理”的完整攻略。 什么是作用域链? 作用域链指的是在 JavaScript 中,用于查找变量的一种机制。在 JavaScript 中,每个函数都有一个作用域链,它是由多个执行上下文(Execution Context)(如全局上下文、函数上下文等)的变量环境引用组成的链式结构。在查找变量时,Java…

    JavaScript 2023年6月10日
    00
  • JavaScript this指向相关原理及实例解析

    JavaScript this指向相关原理及实例解析 JavaScript 中的 this 关键字是一个引起很多初学者困惑的概念。它被用来引用运行时上下文中的当前对象,但是在不同的语法结构和调用方式下,其指向的对象也会发生改变。本文将详细讲解 JavaScript 中 this 的指向原理及实例解析。 什么是 this? 在 JavaScript 中,thi…

    JavaScript 2023年6月11日
    00
  • JavaScript 数组常见操作技巧 (二)

    下文将为您详细讲解“JavaScript 数组常见操作技巧 (二)”的完整攻略。 一、Array.prototype.map() map()方法将数组中的每个元素映射为一个新的元素,最终返回一个映射后的新数组,并不会影响原数组的元素。该方法接收一个回调函数作为参数,回调函数接受三个参数(当前元素的值,当前元素的索引和原数组),并返回一个新值。 下面是一个示例…

    JavaScript 2023年6月10日
    00
  • 28个JavaScript常用字符串方法以及使用技巧总结

    28个JavaScript常用字符串方法以及使用技巧总结 1. 字符串长度 通过 length 属性可以获取字符串的长度。 const str = ‘Hello World’; console.log(str.length); // 11 2. 字符串截取 常见的字符串截取方式为 substring 和 slice,两者用法类似,都是根据起始位置和结束位置截…

    JavaScript 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部