vue elementUI 表单校验的实现代码(多层嵌套)

yizhihongxing

实现Vue ElementUI表单校验的过程一般包含以下步骤:

  1. 引入ElementUI的表单组件和校验规则
  2. 在HTML模板中编写相应的表单代码
  3. 在Vue实例中定义表单数据和验证规则
  4. 编写验证方法并将其绑定到表单组件中

下面将详细讲解这些步骤。

引入ElementUI表单组件和校验规则

在使用ElementUI进行表单校验之前,需要先引入相应的表单组件和校验规则。通过以下命令安装ElementUI:

npm i element-ui

然后在Vue组件中引入相应的组件和校验规则:

import { Form, FormItem, Input, Select, Option } from 'element-ui';
import { required, email, integer, float } from 'element-ui/src/utils/validate';

编写HTML表单代码

在HTML模板中编写相应的表单代码。下面是一个多层嵌套的表单示例:

<el-form :model="form" :rules="rules" ref="ruleForm" label-position="right" label-width="100px" >
  <el-form-item label="用户名" prop="username">
    <el-input v-model="form.username" placeholder="请输入用户名"></el-input>
  </el-form-item>
  <el-form-item label="密码" prop="password">
    <el-input v-model="form.password" type="password" placeholder="请输入密码"></el-input>
  </el-form-item>
  <el-form-item label="邮箱" prop="email">
    <el-input v-model="form.email" placeholder="请输入邮箱"></el-input>
  </el-form-item>
  <el-form-item label="年龄" prop="age">
    <el-input v-model="form.age" placeholder="请输入年龄"></el-input>
  </el-form-item>
  <el-form-item label="职业" prop="career">
    <el-select v-model="form.career" placeholder="请选择">
      <el-option label="IT" value="it"></el-option>
      <el-option label="教育" value="education"></el-option>
      <el-option label="金融" value="finance"></el-option>
    </el-select>
  </el-form-item>
</el-form>

定义表单数据和验证规则

在Vue实例中定义表单数据和验证规则。下面是一个示例:

data() {
    return {
      form: {
        username: '',
        password: '',
        email: '',
        age: '',
        career: ''
      },
      rules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' },
          { min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur' }
        ],
        password: [
          { required: true, message: '请输入密码', trigger: 'blur' },
          { min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' }
        ],
        email: [
          { required: true, message: '请输入邮箱', trigger: 'blur' },
          { type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
        ],
        age: [
          { required: true, message: '请输入年龄', trigger: 'blur' },
          { type: 'integer', message: '年龄必须为整数' },
          { min: 1, max: 120, message: '请输入正确的年龄', trigger: 'blur' }
        ],
        career: [
          { required: true, message: '请选择职业', trigger: 'change' }
        ]
      }
    };
},

上面的代码中定义了form对象,里面包含各个表单字段,以及rules对象,里面包含各个字段的验证规则。

编写验证方法并将其绑定到表单组件中

最后,需要编写验证方法并将其绑定到表单组件中。以“提交”按钮为例,代码如下:

<el-button type="primary" @click="handleSubmit">提交</el-button>

在Vue实例中定义handleSubmit方法,编写表单验证的逻辑:

methods: {
    handleSubmit() {
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          // 表单校验通过,执行提交操作
          console.log('表单校验通过');
        } else {
          // 表单校验失败,输出错误信息
          console.log('表单校验失败');
          return false;
        }
      });
    }
  }

上面的代码中,$refs.ruleForm指向表单组件的ref属性,validate()方法用于对表单进行验证。在回调函数中判断表单是否验证通过,如果通过,则执行提交操作;否则输出错误信息。

示例说明

下面是两个关于多层嵌套的表单校验的实例说明:

示例一

在一个表单中,需要实现两个子表单的嵌套。例如,一个订单表单,其中包含了多个商品的信息表单。

对于这种情况,可以使用$refs获取子组件的实例,然后调用子组件的validate()方法进行校验。

<el-form ref="orderForm" :model="order" :rules="orderRules">
  <el-form-item label="订单号" prop="orderId">
    <el-input v-model="order.orderId"></el-input>
  </el-form-item>
  <el-form-item label="商品信息">
    <el-card>
      <order-item v-for="(item, index) in order.items" :key="index" :item="item" ref="itemRefs[index]"></order-item>
    </el-card>
  </el-form-item>
  <el-button type="primary" @click="submitOrder">提交</el-button>
</el-form>

上面的代码中,使用了子组件OrderItem来表示商品信息的表单,使用了$refs绑定每个子组件的实例索引。在提交表单时,需要先遍历所有子组件并调用validate()方法,再判断整个表单是否验证通过。

methods: {
    submitOrder() {
      let itemsValid = true;
      for (let index in this.$refs.itemRefs) {
        let valid = this.$refs.itemRefs[index].validate();
        itemsValid = itemsValid && valid;
      }
      if (this.$refs.orderForm.validate() && itemsValid) {
        console.log('表单校验通过');
      } else {
        console.log('表单校验失败');
      }
    }
  }

上面的代码中,先使用了一个itemsValid变量记录所有子表单的验证结果,最后再与主表单的验证结果进行比较。

示例二

在一个表单中,需要实现日期范围校验。例如,开始日期必须小于结束日期。

对于这种情况,可以在表单校验规则中使用自定义方法进行校验。

<el-form ref="dateForm" :model="date" :rules="dateRules">
  <el-form-item label="开始日期" prop="startDate">
    <el-date-picker v-model="date.startDate" type="date"></el-date-picker>
  </el-form-item>
  <el-form-item label="结束日期" prop="endDate">
    <el-date-picker v-model="date.endDate" type="date"></el-date-picker>
  </el-form-item>
  <el-button type="primary" @click="submitDate">提交</el-button>
</el-form>

上面的代码中,在规则中使用了自定义方法dateRangeValidator进行日期范围的校验。

methods: {
    dateRangeValidator(rule, value, callback) {
      if (this.date.startDate && this.date.endDate) {
        let startDate = new Date(this.date.startDate).getTime();
        let endDate = new Date(this.date.endDate).getTime();
        if (startDate > endDate) {
          callback(new Error('结束日期必须大于开始日期'));
        } else {
          callback();
        }
      }
      callback(new Error('日期不能为空'));
    },
    submitDate() {
      this.$refs.dateForm.validate((valid) => {
        if (valid) {
          console.log('表单校验通过');
        } else {
          console.log('表单校验失败');
        }
      });
    }
}

上面的代码中,dateRangeValidator方法接受三个参数:规则、字段值和回调函数。在该方法中,校验了开始日期和结束日期是否为空,并判断开始日期是否大于结束日期。最后如果回调函数中传入了一个参数,则表明校验出现了错误,这个参数可以是一个Error对象或一个字符串,否则表单校验通过。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue elementUI 表单校验的实现代码(多层嵌套) - Python技术站

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

相关文章

  • JS简单实现获取元素的封装操作示例

    下面是JS简单实现获取元素的封装操作示例的完整攻略: 简介 在前端开发中,经常需要获取页面中的元素,然后对这些元素进行操作,例如修改样式、添加事件等。而原生的JavaScript中,获取元素的方式比较麻烦,需要使用document.getElementById、document.querySelector等API。为了简化开发流程,我们可以封装一些方法来快速…

    JavaScript 2023年6月10日
    00
  • JS数组的常用10种方法详解

    JS数组的常用10种方法详解 在JavaScript编程中,数组是一种十分常见的数据结构。JS数组提供了丰富的API供我们操作和处理数组,今天我们来详细讲解一下JS数组的常用10种方法。 1. push() arr.push(item1, item2, …, itemX) push()方法在数组的末尾添加一个或多个元素,并返回数组的新长度。例如: let…

    JavaScript 2023年5月27日
    00
  • Javascript核心读书有感之语言核心

    请允许我对Javascript核心读书有感之语言核心进行详细讲解。在这份攻略中,我将为大家介绍Javascript语言核心的主要知识点,帮助读者更好的掌握该语言。 为什么要学习Javascript语言核心? Javascript是一种非常流行的脚本语言,广泛应用于Web开发、移动端开发和桌面应用程序开发等领域。对于想要从事前端开发、全栈开发、移动端开发等方向…

    JavaScript 2023年6月10日
    00
  • JS仿JQuery选择器功能

    下面是JS仿JQuery选择器功能的完整攻略,包含如何实现选择器、示例说明以及注意事项等。 选择器实现原理 实现JS仿JQuery选择器功能的核心在于通过遍历DOM树,找到与选择器匹配的元素。以下是具体实现方法: 解析选择器字符串,获取选择器匹配的元素类型和其他属性,如类名、ID等。 遍历DOM树,从根节点开始,递归查找所有节点,将匹配选项和节点做比对。 检…

    JavaScript 2023年6月10日
    00
  • JavaScript promise的使用和原理分析

    下面是关于“JavaScript promise的使用和原理分析”的完整攻略。 简介 Promise 是 JavaScript 中一种较新的异步编程解决方案,用于解决回调函数嵌套过多的问题,使异步代码更加易于维护和阅读。Promise 对象代表了未来将要发生的事件,它是异步操作的结果的一个临时存储对象,可以让我们像同步操作一样去处理异步操作的结果。 Prom…

    JavaScript 2023年5月28日
    00
  • 关于vue 结合原生js 解决echarts resize问题

    关于vue结合原生js解决echarts resize问题,可以使用下面的攻略: 攻略说明 采用vue-echarts插件加载echarts,并且绑定图表的 DOM 元素到 vue 实例中 使用 js 的 resize() 方法,监听 window 大小变化,当窗口大小发生改变时,使用 triggerResize() 方法通知echarts自适应大小 示例说…

    JavaScript 2023年6月11日
    00
  • JavaScript实现获取dom中class的方法

    实现获取DOM中class的方法,可以使用原生JavaScript中的classList属性,也可以使用jQuery中的选择器方法。 使用原生JavaScript 获取DOM元素节点 javascript var element = document.getElementById(‘elementId’); 获取节点中的class列表 javascript …

    JavaScript 2023年6月10日
    00
  • js两种拼接字符串的简单方法(必看)

    JS两种拼接字符串的简单方法 在JavaScript中,有多种方法可以将字符串拼接在一起。在本文中,我们将介绍两种简单的方法。 方法1: 使用加号 “+” 运算符 加号运算符是最常用的字符串拼接方式之一。下面是一个简单的例子: const str1 = "Hello"; const str2 = "world"; co…

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