element多个表单校验的实现

yizhihongxing

我们来详细讲解一下如何通过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正则表达式校验与递归函数实际应用实例解析

    下面是详细讲解JavaScript正则表达式校验与递归函数实际应用实例解析的完整攻略。 一、正则表达式校验 1.1 什么是正则表达式 正则表达式是一种用特定语法编写的用来匹配、搜索和替换字符串的工具。在JavaScript中,可以使用正则表达式来校验和处理字符串。 1.2 常用的正则表达式语法 下面是一些常用的正则表达式语法: ^ 匹配字符串的开始位置 $ …

    JavaScript 2023年5月28日
    00
  • ES6 Class中实现私有属性的一些方法总结

    下面是关于“ES6 Class中实现私有属性的一些方法总结”的完整攻略: 1. 私有属性的概念 在ES6的Class中,私有属性是指只能在类内部访问,而无法在类外部访问的属性。目前,ES6并不支持直接定义私有属性,但是可以通过一些方法实现类似于私有属性的效果。 2. 实现私有属性的方法 以下是几种实现私有属性的方法: 2.1 在构造函数中定义私有属性 这种方…

    JavaScript 2023年6月10日
    00
  • Ajax请求二进制流进行处理(ajax异步下载文件)的简单方法

    对于Ajax请求二进制流进行处理的攻略可以分为以下几个步骤: 1. 发送二进制流文件 首先,在服务端需要将文件转换为二进制流格式并以这种格式进行传输。可以使用以下PHP代码示例: $file = ‘example.xlsx’; header(‘Content-Description: File Transfer’); header(‘Content-Type…

    JavaScript 2023年6月11日
    00
  • JavaScript的事件机制详解

    JavaScript的事件机制详解 事件机制是 JavaScript 重要的一部分,它使得 Web 应用得以用户交互和响应。在本文中,我将详细讲解 JavaScript 的事件机制,包括事件模型、事件流以及事件捕获和冒泡。 事件模型 JavaScript 事件模型是一种基于事件触发的编程模型。当用户操作网页中的元素(如按钮、文本输入框等)时,会触发事件,Ja…

    JavaScript 2023年5月28日
    00
  • webpack热模块替换(HMR)/热更新的方法

    Webpack热模块替换(HMR)是一种优化开发工作流的技术,可以在运行时修改代码,而无需刷新页面。这样可以提高我们的开发效率和体验。以下是Webpack热模块替换的详细攻略: 什么是Webpack热模块替换(HMR)/ 热更新? 热模块替换(HMR)是Webpack提供的一种能力,可以让我们在应用程序运行的时候,实现对代码的修改。这意味着我们可以在无需刷新…

    JavaScript 2023年6月11日
    00
  • js Element Traversal规范中的元素遍历方法

    JS Element Traversal规范在DOM操作中提供了一些方便的元素遍历方法,能够帮助我们更方便地查找或操作页面元素。 其中主要包括以下几个方法: children element.children方法会返回指定元素的所有子元素节点,不包含文本节点或注释节点。 示例: <div id="parent"> <p&…

    JavaScript 2023年6月10日
    00
  • JS和JQ的event对象区别分析

    JS和JQ都有一个event对象,但是它们的区别还是比较明显的。在这里我们来详细讲解一下。 1. JS的event对象 在JS中,事件触发时会自动生成一个event对象,并且通过addEventListener或者window.attachEvent绑定的函数,第一个参数都是event。event对象包含了一些事件的属性和方法,可以方便的获取事件的相关信息。…

    JavaScript 2023年6月10日
    00
  • JavaScript Timer实现代码

    下面我来介绍怎么实现JavaScript Timer。 一、概述 JavaScript Timer是一种可以在特定时间间隔内重复执行代码的方法。通常在需要动态更新UI元素、周期性发送数据、定期清理缓存等大量场景中都会采用JS Timer。 二、实现过程 在JavaScript中实现定时器有多种方法,如: 1. setInterval和clearInterva…

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