elementui是怎么做表单验证的?

news2025/1/31 7:58:50

文章目录

  • 前言
  • elementui是怎么做表单验证?
    • 步骤
  • 一、 表单验证校验代码?
  • 二、el-button提交验证代码
    • 2.validate方法深入了解
    • 1. 有参数
    • 2. 无参数
  • 总结


前言

在这里插入图片描述

在项目开发中,我们经常会遇到表单保存的功能,在表单保存前,常常需要做表单必填项的校验,校验通过以后才去发请求保存表单数据。这篇文章主要就是带大家了解一下如何使用elementui做表单验证

elementui是怎么做表单验证?

步骤

el-form表单官网地址
根据文档说明,model为表单的数据对象,el-form通过model绑定数据。
reles为表单验证规则对象,其中字段名要与model中的字段名一一对应
el-form-item 容器,通过 label 绑定标签,prop属性设置为需要验证的字段名
表单组件通过 v-model 绑定 model 中的数据
方法:
1.在表单中加rules属性,然后在data里写校验规则。
2.内部添加规则
3.自定义函数校验

官网方法代码

<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  <el-form-item label="活动名称" prop="name">
    <el-input v-model="ruleForm.name"></el-input>
  </el-form-item>
  <el-form-item label="活动区域" prop="region">
    <el-select v-model="ruleForm.region" placeholder="请选择活动区域">
      <el-option label="区域一" value="shanghai"></el-option>
      <el-option label="区域二" value="beijing"></el-option>
    </el-select>
  </el-form-item>
  <el-form-item label="活动时间" required>
    <el-col :span="11">
      <el-form-item prop="date1">
        <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.date1" style="width: 100%;"></el-date-picker>
      </el-form-item>
    </el-col>
    <el-col class="line" :span="2">-</el-col>
    <el-col :span="11">
      <el-form-item prop="date2">
        <el-time-picker placeholder="选择时间" v-model="ruleForm.date2" style="width: 100%;"></el-time-picker>
      </el-form-item>
    </el-col>
  </el-form-item>
  <el-form-item label="即时配送" prop="delivery">
    <el-switch v-model="ruleForm.delivery"></el-switch>
  </el-form-item>
  <el-form-item label="活动性质" prop="type">
    <el-checkbox-group v-model="ruleForm.type">
      <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
      <el-checkbox label="地推活动" name="type"></el-checkbox>
      <el-checkbox label="线下主题活动" name="type"></el-checkbox>
      <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
    </el-checkbox-group>
  </el-form-item>
  <el-form-item label="特殊资源" prop="resource">
    <el-radio-group v-model="ruleForm.resource">
      <el-radio label="线上品牌商赞助"></el-radio>
      <el-radio label="线下场地免费"></el-radio>
    </el-radio-group>
  </el-form-item>
  <el-form-item label="活动形式" prop="desc">
    <el-input type="textarea" v-model="ruleForm.desc"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
    <el-button @click="resetForm('ruleForm')">重置</el-button>
  </el-form-item>
</el-form>
<script>
  export default {
    data() {
      return {
        ruleForm: {
          name: '',
          region: '',
          date1: '',
          date2: '',
          delivery: false,
          type: [],
          resource: '',
          desc: ''
        },
        rules: {
          name: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
          ],
          region: [
            { required: true, message: '请选择活动区域', trigger: 'change' }
          ],
          date1: [
            { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
          ],
          date2: [
            { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
          ],
          type: [
            { type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
          ],
          resource: [
            { required: true, message: '请选择活动资源', trigger: 'change' }
          ],
          desc: [
            { required: true, message: '请填写活动形式', trigger: 'blur' }
          ]
        }
      };
    },
    methods: {
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            alert('submit!');
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },
      resetForm(formName) {
        this.$refs[formName].resetFields();
      }
    }
  }
</script>

在这里插入图片描述
我们没有按规则填入,然后做个表单提示,类似于下图
在防止用户犯错的前提下,尽可能让用户更早地发现并纠正错误。
在这里插入图片描述

一、 表单验证校验代码?

1.给el-form绑定一个属性值,属性值是一个对象
demo文件
2.给表单域绑定验证属性
3.rules属性添加验证规则

<template>
  <div>
    <h1>element表单验证</h1>
    <el-form :model="people" :rules="PeopleRules" label-width="100px" >
      <!-- 1.给el-form绑定一个属性值,属性值是一个对象 -->
      <!-- 3.rules属性添加验证规则 -->
      <el-form-item label="姓名" prop="name">
        <!-- 2.给表单域绑定验证属性 -->
        <!-- el-form-item表单域 prop验证name属性 -->
        <el-input v-model="people.name" ></el-input>
      </el-form-item>
      <el-form-item label="性别"  prop="sex">
        <!-- el-form-item表单域 prop验证sex属性 -->
        <el-select v-model="people.sex" >
          <el-option label="" value="1"></el-option>
          <el-option label="" value="2"></el-option>
        </el-select>
      </el-form-item>

    </el-form>
  </div>
</template>
<script>
export default{
  data(){
    return{
      people:{
        name:'',
        sex:""
      },
      PeopleRules:{
        // 4.验证规则  
        name:[
          // 姓名验证
          {
          // 第一条规则 required:true必填的 message 不符合规则提示消息 trigger触发方式
          required:true,message:'请输入姓名',trigger:'blur'
          },
          {
          //第二条规则 min最小长度,max最大长度
          min:2, max:10,message:'姓名不能要在 2-10个字符区间',trigger:'blur'
          }
      ],
      sex:[
        // 性别验证
        // 第一条规则 required:true必填的 message 不符合规则提示消息 trigger触发方式
        {  required:true ,message:'必须选择一个性别',trigger:'blur'}
      ]
      }
    }
  }
}
</script>
<style scoped>

</style>

效果
在这里插入图片描述

二、el-button提交验证代码

在提交的之前,先验证表单,是否填写内容,符合规则,如果不符合阻止提交

1.首先给el-form绑定ref实例
2.el-from=>validate 对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。若不传入回调函数,则会返回一个 promise
3.resetFields对整个表单进行重置,将所有字段值重置为初始值并移除校验结果

<template>
  <div>
    <h1>element表单验证</h1>
    <el-form ref="people" :model="people" :rules="PeopleRules" label-width="100px" >
      <!-- 1.给el-form绑定一个属性值,属性值是一个对象 -->
      <!-- rules属性添加验证规则 -->
      <el-form-item label="姓名" prop="name">
        <!-- 2.给表单域绑定验证属性 -->
        <!-- el-form-item表单域 prop验证name属性 -->
        <el-input v-model="people.name" ></el-input>
      </el-form-item>
      <el-form-item label="性别"  prop="sex">
        <!-- el-form-item表单域 prop验证sex属性 -->
        <el-select v-model="people.sex" >
          <el-option label="" value="1"></el-option>
          <el-option label="" value="2"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="性别"  prop="sex">
        <!-- 提交做验证 -->
         <el-button type="primary" @click="createPeople">提交</el-button>
         <el-button type="primary" @click="$refs.people.resetFields()">重置</el-button>
         <!-- 对整个表单进行重置,将所有字段值重置为初始值并移除校验结果 -->
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
export default{
  data(){
    return{
      people:{
        name:'',
        sex:""
      },
      PeopleRules:{
        // 4.验证规则  
        name:[
          // 姓名验证
          {
          // 第一条规则 required:true必填的 message 不符合规则提示消息 trigger触发方式
          required:true,message:'请输入姓名',trigger:'blur'
          },
          {
          //第二条规则 min最小长度,max最大长度
          min:2, max:10,message:'姓名不能要在 2-10个字符区间',trigger:'change'
          }
      ],
      sex:[
        // 性别验证
        // 第一条规则 required:true必填的 message 不符合规则提示消息 trigger触发方式
        {  required:true ,message:'必须选择一个性别',trigger:'blur'}
      ]
      }
    }
  },
  methods:{
    createPeople(){
      // createPeople提交按钮事件
      this.$refs.people.validate((valid,err)=>{  
        // validate对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。若不传入回调函数,则会返回一个 promise
        // Function(callback: Function(boolean, object))
        // 第一个参数valid验证成功返回true 否则false
        console.log(valid)
        if(!valid){
          //!valid 验证失败
          this.$message.error('人员信息填写有误,请检查');
          return
        }
        // 在这里写提交表单的代码(把用户填写的信息,通过axios传给服务器端)
      })
    }
  }
}
</script>
<style scoped>

</style>

valid打印
表单验证不通过
在这里插入图片描述
表单验证通过
在这里插入图片描述
提交按钮验证效果
在这里插入图片描述
重置按钮效果
重置前
在这里插入图片描述
点击重置按钮
在这里插入图片描述

2.validate方法深入了解

validate对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。若不传入回调函数,则会返回一个 promise

1. 有参数

Function(callback: Function(boolean, object))

<template>
  <div>
    <h1>element表单验证</h1>
    <el-form ref="people" :model="people" :rules="PeopleRules" label-width="100px" >
      <!-- 1.给el-form绑定一个属性值,属性值是一个对象 -->
      <!-- rules属性添加验证规则 -->
      <el-form-item label="姓名" prop="name">
        <!-- 2.给表单域绑定验证属性 -->
        <!-- el-form-item表单域 prop验证name属性 -->
        <el-input v-model="people.name" ></el-input>
      </el-form-item>
      <el-form-item label="性别"  prop="sex">
        <!-- el-form-item表单域 prop验证sex属性 -->
        <el-select v-model="people.sex" >
          <el-option label="" value="1"></el-option>
          <el-option label="" value="2"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="性别"  prop="sex">
        <!-- 提交做验证 -->
         <el-button type="primary" @click="createPeople">提交</el-button>
         <el-button type="primary" @click="$refs.people.resetFields()">重置</el-button>
         <!-- 对整个表单进行重置,将所有字段值重置为初始值并移除校验结果 -->
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
export default{
  data(){
    return{
      people:{
        name:'',
        sex:""
      },
      PeopleRules:{
        // 4.验证规则  
        name:[
          // 姓名验证
          {
          // 第一条规则 required:true必填的 message 不符合规则提示消息 trigger触发方式
          required:true,message:'请输入姓名',trigger:'blur'
          },
          {
          //第二条规则 min最小长度,max最大长度
          min:2, max:10,message:'姓名不能要在 2-10个字符区间',trigger:'change'
          }
      ],
      sex:[
        // 性别验证
        // 第一条规则 required:true必填的 message 不符合规则提示消息 trigger触发方式
        {  required:true ,message:'必须选择一个性别',trigger:'blur'}
      ]
      }
    }
  },
  methods:{
    createPeople(){
      // createPeople提交按钮事件
      this.$refs.people.validate((valid,err)=>{  
        // validate对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。若不传入回调函数,则会返回一个 promise
        // Function(callback: Function(boolean, object))
        // 第一个参数valid验证成功返回true 否则false
        console.log('validate第一个参数',valid)
        console.log('validate第二个参数',err)
        if(!valid){
          //!valid 验证失败
          this.$message.error('人员信息填写有误,请检查');
          return
        }
        // 在这里写提交表单的代码(把用户填写的信息,通过axios传给服务器端)
      })
    }
  }
}
</script>
<style scoped>

</style>

在这里插入图片描述

2. 无参数

validate若不传入回调函数,则会返回一个 promise

 this.$refs.people.validate().then(()=>{
        console.log('验证成功回调')
      }).catch(
       (err)=>{
        // err错误对象
        console.log(err)
        console.log("验证失败回调")
       } 
      )

完整代码

<template>
  <div>
    <h1>element表单验证</h1>
    <el-form ref="people" :model="people" :rules="PeopleRules" label-width="100px" >
      <!-- 1.给el-form绑定一个属性值,属性值是一个对象 -->
      <!-- rules属性添加验证规则 -->
      <el-form-item label="姓名" prop="name">
        <!-- 2.给表单域绑定验证属性 -->
        <!-- el-form-item表单域 prop验证name属性 -->
        <el-input v-model="people.name" ></el-input>
      </el-form-item>
      <el-form-item label="性别"  prop="sex">
        <!-- el-form-item表单域 prop验证sex属性 -->
        <el-select v-model="people.sex" >
          <el-option label="" value="1"></el-option>
          <el-option label="" value="2"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="性别"  prop="sex">
        <!-- 提交做验证 -->
         <el-button type="primary" @click="createPeople">提交</el-button>
         <el-button type="primary" @click="$refs.people.resetFields()">重置</el-button>
         <!-- 对整个表单进行重置,将所有字段值重置为初始值并移除校验结果 -->
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
export default{
  data(){
    return{
      people:{
        name:'',
        sex:""
      },
      PeopleRules:{
        // 4.验证规则  
        name:[
          // 姓名验证
          {
          // 第一条规则 required:true必填的 message 不符合规则提示消息 trigger触发方式
          required:true,message:'请输入姓名',trigger:'blur'
          },
          {
          //第二条规则 min最小长度,max最大长度
          min:2, max:10,message:'姓名不能要在 2-10个字符区间',trigger:'change'
          }
      ],
      sex:[
        // 性别验证
        // 第一条规则 required:true必填的 message 不符合规则提示消息 trigger触发方式
        {  required:true ,message:'必须选择一个性别',trigger:'blur'}
      ]
      }
    }
  },
  methods:{
    createPeople(){
      this.$refs.people.validate().then(()=>{
        console.log('验证成功回调')
      }).catch(
       (err)=>{
        // err错误对象
        console.log(err)
        console.log("验证失败回调")
       } 
      )
    }
  }
}
</script>
<style scoped>

</style>

效果
验证失败
在这里插入图片描述
验证成功
在这里插入图片描述

总结

如果这篇【文章】有帮助到你💖,希望可以给我点个赞👍,创作不易,如果有对前端端或者对python感兴趣的朋友,请多多关注💖💖💖,咱们一起探讨和努力!!!
👨‍🔧 个人主页 : 前端初见

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/433499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Salesforce如何防止黑客攻击和数据泄露?了解他们的安全措施!

安全性一直是Salesforce密切关注的问题。Google的安全浏览报告指出&#xff0c;2022年网络钓鱼网站的数量增加了80&#xff05;。面对着黑客攻击、安全漏洞、数据泄露等不安全事件频发&#xff0c;实施更强大的安全措施比以往更加重要。 调查显示&#xff0c;电子邮件目前是网…

阿里巴巴图标,font-family字体样式

阿里巴巴官网&#xff1a;https://www.iconfont.cn/ 如有需要&#xff0c;请注意到文章最后的问题。 一&#xff0c;图标 1&#xff0c;搜索关键词&#xff0c;点击图标 -> 加入购物车 -> 添加到项目 2&#xff0c;两种方式 &#xff08;1&#xff09;选择 Font cla…

推荐一个好工具,可以替代 swagger 生成文档

Swagger 是一个规范且完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口&#xff0c;可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 S…

SpringBoot扫包排除指定包(配置文件形式)

1、背景​ 在有些时候&#xff0c;不同环境可能需要用代码不同模块的能力&#xff0c;但是不同环境的项目包是一致的。这块我们想到的最简单的办法是在maven打包的时候打不同的模块&#xff0c;但是这样往往需要出多个包&#xff0c;虽然这种方式是正路但运维同学嫌麻烦。第二种…

Java面试题--MySQL索引

一. 索引介绍 MySQL的索引是一种数据结构&#xff0c;它可以帮助MySQL快速定位需要访问的记录。索引可类比于一本书的目录&#xff0c;通过它可以快速找到某个特定的记录。 MySQL支持多种类型的索引&#xff0c;每种索引都有其优势和局限性&#xff0c;常用的包括&#xff1a…

python类型转换

我们就想那我们目前接触到的三种类型做一下转换 分别是 字符串 浮点数 正整数 可能会有刚接触编程的小伙伴在想 没事类型转换什么呢&#xff1f; 其实在实际开发中 这东西用的不要太多 根据我们目前认识的类型 先用到三个方法 我们编写代码 String_int str(111); print(St…

初阶数据结构——时间复杂度和空间复杂度

目录 算法效率算法的复杂度 时间复杂度时间复杂度的概念习题 空间复杂度空间复杂度的概念习题 什么是数据结构&#xff1f; 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的集合。 什么是算法&#xff1f; 算法…

java+ssm603企业人事档案管理系统带前端springboot

人事管理系统的设计与实现采用Spring、SpringMVC和MyBatis作为主体框架,系统设计遵循界面层、业务逻辑层和数据访问层的Web开发三层架构。采用B/S结构,使得系统更加容易维护。人事管理系统的设计与实现主要实现角色有管理员和用户,管理员在后台管理资料文件模块、员工模块、文件…

深度相机初体验:Hello World

当我的组长给了我一个深度相机&#xff0c;倒霉的事情就开始了&#xff0c;在使用的过程中遇到的某些问题搜不到&#xff0c;头秃啊呜呜呜呜呜呜呜呜 配置&#xff1a; ubuntu20.04&#xff08;我实在是懒得去升级了&#xff0c;一旦升级就可能会出现找不到教程的可能性&#x…

运行时内存数据区之执行引擎(一)

执行引擎概述 执行引擎是Java虚拟机核心的组成部分之一。 “虚拟机”是一个相对于“物理机”的概念&#xff0c;这两种机器都有代码执行能力&#xff0c;其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的&#xff0c;而虚拟机的执行引擎则是由软…

【MATLAB基础绘图第8棒】绘制局部放大图

MATLAB绘制局部放大图 1 工具准备 MATLAB官网-ZoomPlot(Kepeng Qiu. Matlab Central, 2022) 初始数据图绘制完成后&#xff0c;调用以下代码&#xff1a; %% 添加局部放大 zp BaseZoom(); zp.plot;1.1 具体绘制步骤 具体绘制步骤如下&#xff1a; 通过鼠标左键框选作图区…

JavaScript中如何删除对象/数组中null、undefined、空对象及空数组实例代码

如下&#xff0c;对于一个多层嵌套的数据结构&#xff1a;例如 要做的就是删除所有value为空&#xff0c;数组为空&#xff0c;对象为空的字段 const querys {name: 测试,httpMethod: ,httpHeaders: [{key: Accept,value: test,},],restParams: [{key: ,value: ,},],body: {b…

GZIPOutputStream GZIPInputStream 数据压缩解压

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 数据压缩&解压 前言一、最终走上了压缩的路 GZIPOutputStream二、收到数据进行解压 GZIPInputStream三、测试Demo四、验证结果总结 前言 最近接手了一批性能优化… 遇到…

全注解下的SpringIoc

Spring架构中的核心理念就是IOC和AOP&#xff0c;可以说&#xff0c;Spring的强大离不开这两大特性。 因为spring boot推荐采用注解开发&#xff0c;所以文中主要介绍基于注解的Spring Ioc。 IoC容器简介 Spring IoC 容器是个管理 Bean&#xff08;在Spring 中把每个需要管理…

VMware vCenter Server 8.0U1 发布 - 集中式管理 vSphere 环境

请访问原文链接&#xff1a;VMware vCenter Server 8.0U1 - 集中式管理 vSphere 环境&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 2023-04-18, VMware vSphere 8.0U1 发布。 详见&#xff1a;VMware vSphere 8 Update 1 新…

单片机的实例——28BYJ48步进电机

整体过程 准备资料1&#xff0c;步进电机内部结构示意图2&#xff0c;步进电机命名3&#xff0c;实际结构的转速比4&#xff0c;数值的含义5&#xff0c;实际内部主动轮结构分析实际内部机构及接线定子部分转子部分 定子和转子磁极的工作分析 6&#xff0c;工作时序7&#xff0…

机器学习 day06(向量化应用于多元线性回归的梯度下降算法,正规方程)

向量化多元线性回归&#xff0c;及梯度下降算法 将W₁&#xff0c;…&#xff0c;Wn写成向量W&#xff0c;将X₁&#xff0c;…&#xff0c;Xn写成向量X&#xff0c;而b还是之前的b注意&#xff1a;在多元线性回归的梯度下降算法中&#xff0c;Wj是指从W₁到Wn中的某一项&…

堆排序及top-k问题

堆排序及top-k问题 堆排序建堆向上调整建堆向下建堆 堆排序 top-k问题&#xff0c;建堆的应用 堆排序 堆排序&#xff0c;听名字就是要对堆进行排序&#xff0c;但当我们是无序数据时&#xff0c;首先我们就需要建立一个堆 建堆 这里让我们来回忆一下前面的堆&#xff0c;改…

Springboot基础学习之(二十三):实现定时任务

定时任务&#xff1a;在开发过程中是经常能够使用到的&#xff1a;定时发布邮件等等 先了解一下什么时cron表达式&#xff1f; 它是定义执行任务时间的一种时间表达式&#xff0c;使用方法 Scheduled(cron "0/2 * * * * ? ")&#xff0c;这里代码的含义是每两秒执行…

适用于 Windows 的 5 个最好的 PDF 转换器应用程序

由于稳定性、高分辨率、高安全性、易于传输等特点&#xff0c;PDF已经成为我们日常工作中最常用的格式。我们在享受PDF带来便利的同时&#xff0c;也发现PDF带来了一些不便&#xff0c;其中最大的问题就是PDF内容的编辑难度。同时&#xff0c;并不是所有的文件都是PDF格式的&am…