element-plus el-form 表单、表单验证 使用方法、注意事项

这篇具有很好参考价值的文章主要介绍了element-plus el-form 表单、表单验证 使用方法、注意事项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

element-plus@2.0.6 及之后的版本,表单验证不再是同步执行的了

另外,element-plus@2.1.4 及之后的版本,才可按照官方文档示例正常使用(使用的是两者的中间版本的话,最好先自行确认下正确的

const submitForm = async (formEl: FormInstance | undefined) => {
  if (!formEl) return
  await formEl.validate((valid, fields) => {
    if (valid) {
      console.log('submit!') // 位置1
    } else {
      console.log('error submit!', fields)
    }
  })
  // 位置2
}

上例中:

如果在“位置1”执行表单验证通过后的业务代码,可以去掉 async...await

如果在“位置2”执行,则需加上。否则,会直接跳过验证

这样,与异步校验(三、6)的使用办法就一致了,两者可以取其一。element-plus@2.1.4及之后的推荐统一使用上例中的写法


表单定义规则

//表单验证规则 
const rules = reactive({
  name: [{ validator: checkName, trigger: ['blur', 'change'],required: true}],
  phone: [{ type: number, validator: checkPhone, trigger: ['blur', 'change'] }],
  password: [{ validator: checkpassword, trigger: ['blur'] }],
})

el-form配置

<el-form :model="formData" :rules="rules" ref="baseForm"></el-form>

上一步已经为表单绑定了规则列表formData,接下来,只需要在form-item中使用prop绑定验证规则即可

<el-form-item label="电话" style="width: 40%" prop="phone">
   <el-input v-model="formData.phone" type="text" autocomplete="off" disabled />
</el-form-item>

对应关系:

表单对象 formData: { name: '' }

表单元素 prop="name"

规则列表 rules: { name: [{...}] }

另外,验证嵌套属性可以通过 . 连接绑定:

formData: { obj: { name: '' } }

prop="obj.name"

baseRules: { 'obj.name': [{...}] }

完整demo

<template>
    <el-form :model="formData" :rules="rules" ref="ruleFormRef" status-icon label-width="120px" size="large">
        <el-form-item label="姓名" style="width: 40%" prop="name">
          <el-input v-model="form.name" type="text" autocomplete="off" />
        </el-form-item>
        <el-form-item label="性别" style="width: 40%" prop="sex">
          <el-select v-model="form.sex" placeholder="请选择性别">
            <el-option label="男" :value=1 />
            <el-option label="女" :value=0 />
          </el-select>
        </el-form-item>
        <el-form-item label="生日" style="width: 40%" prop="birthday">
          <!-- <el-input v-model="form.birthday" type="text" autocomplete="off" /> -->
          <el-date-picker v-model="form.birthday" type="date" placeholder="请选择生日!" style="width: 100%"
            value-format="YYYY-MM-DD" />
        </el-form-item>
        <el-form-item label="电话" style="width: 40%" prop="phone">
          <el-input v-model="form.phone" type="text" autocomplete="off" disabled />
        </el-form-item>
        <el-form-item label="密码" style="width: 40%" prop="password">
          <el-input v-model="form.password" type="password" autocomplete="off" show-password />
        </el-form-item>
      </el-form>
</template>

<script setup>
let formData = reactive({
  birthday: '',
  name: '',
  phone: '',
  sex: 1,
  password: ''
})
// 验证函数
const checkPhone = (rule, value, callback) => {
  console.log(value);
  if (!Number.isInteger(Number(value))) {
    return callback(new Error('请输入数字!'))
  } else if (String(value).length != 11) {
    return callback(new Error('您输入的手机位数不是11位!'))
  } else {
    callback()
  }
}
// 验证函数
const checkpassword = (rule, value, callback) => {
  console.log(value);
  if (String(value).length > 12) {
    return callback(new Error('您输入的密码过长!长度不超过12位'))
  } else {
    callback()
  }
}
// 验证函数
const checkName = (rule, value, callback) => {
  if (value.length > 8) {
    return callback(new Error('您输入的姓名过长!'))
  } else {
    callback()
  }
}
//表单验证规则 
const rules = reactive({
  name: [{ validator: checkName, trigger: ['blur', 'change'] }],
  phone: [{ type: number, validator: checkPhone, trigger: ['blur', 'change'] }],
  password: [{ validator: checkpassword, trigger: ['blur'] }],
})

</script>

配置项以及其可选的值(详细文档链接)

Rules API:
  1. type: 指示要使用的验证器类型

type: string, number, boolean, method, regexp, integer, float, array, object, enum, date, url, hex, email, any

  1. Required

required:必填/非必填

  1. Messages

message: 错误提示

  1. Pattern

pattern: 值需校验通过的正则表达式

  1. Range

min, max: type为array, string时,指长度。为number时,指大小

  1. Length

len: type为array, string时,指长度。为number时,指值

  1. Enumerable

enum: 例:{ type: 'enum', enum: ['admin', 'user', 'guest'] }

  1. Whitespace

  1. Deep Rules 对象的深层规则

fields: 对象的属性名,数组的下标

defaultField: 应用于对象、数组内的所有成员

  1. Transform

transform: 方法,对值的预处理

  1. validator

validator: 自定义验证方法

  1. asyncValidator

asyncValidator: 自定义异步验证方法

trigger: 触发验证的方法,值可用字符串’blur’, ‘change’,也可是数组[‘blur’, ‘change’]

注意,规则数组是按序逐一被执行验证的(trigger='blur’时,更改input框的值不会触发验证)

进阶

1、单项验证

可在表单的项 ( < el-form-item > ) 中单独设置验证规则

<el-form-item label="邮箱:" prop="email"
  :rules="[{ type: 'email', message: '邮箱格式错误', trigger: 'change' }]"
></el-form-item>

简写:

<el-form-item label="姓名:" prop="username" required />

对于字符串的非空校验,element plus表单验证提供了一种简单的方式(能实现校验,但有很大局限性,而且提示语是英文)


为了代码的可维护性与美观,尽量不要将规则写在模板中。但某些情况下必须如此,比如,当需要额外传递参数给validator时:

<el-form-item label="样本类型:" prop="sampType"
    :rules="[{ validator: (rule, value, cb) => validateSampType(rule, value, cb, yourParams), trigger: 'change' }]"
></el-form-item>

正则校验

//regex.js
// 手机号或座机号
export const reg_tel_phone = /(^((\+86)|(86))?(1[3-9])\d{9}$)|(^(0\d{2,3})-?(\d{7,8})$)/
//doctor.vue
import { reg_tel_phone } from '@/assets/regex'
rules: {
  name: [{ required: true, message: '请输入医生名称', trigger: 'blur' }],
  title: [{ required: true, message: '请选择职称', trigger: 'change' }],
  tel: [{ pattern: reg_tel_phone, message: '请输入正确的手机号或座机号', trigger: ['blur', 'change'] }]
},

注意:直接在vue模板中进行单项验证使用正则校验时,需将RegExp定义成响应式变量。文章来源地址https://www.toymoban.com/news/detail-755710.html

到了这里,关于element-plus el-form 表单、表单验证 使用方法、注意事项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • element-plus的form表单验证Prop和Rules设置约定

    在使用表单验证过程中遇到深层对象(即嵌套对象)和数组或动态创建数组对象时验证不再起作用或者出现错误。 官网的说明“ Form  组件提供了表单验证的功能,只需为  rules  属性传入约定的验证规则,并将  form-Item  的  prop  属性设置为需要验证的特殊键值即可。 更多高

    2024年02月16日
    浏览(11)
  • el-form/el-form-item表单验证

    el-form/el-form-item表单验证

    如下图所示,当触发表单验证后,输入相应的内容,表单检验通过,但是上传图片后的表单校验没有通过,需要点击表单提交触发表单提交时的校验才有效 el-form 表单,在输入内容改变元素的值后,会触发上层 el-form-item 的 el.form.chang / \\\'el.form.blur’事件,el-form-item 接收到此事

    2024年02月12日
    浏览(7)
  • el-form单个表单项校验方法;element-ui表单单个选项校验;el-form单个表单校验

    el-form单个表单项校验方法;element-ui表单单个选项校验;el-form单个表单校验

    当我们使用element-ui的el-form时,想在提交表单前对其中一个表单进行验证时就可以使用element自带的方法“validateField” 如图: 使用示例

    2024年02月16日
    浏览(18)
  • el-form表单el-form-item prop一次验证两个值

    1.表单添加两个框,prop写上 2.data里写,验证规则添加validator: this.validateFields 3.validateFields设置

    2024年02月10日
    浏览(16)
  • Vue - Element el-form 表单对象多层嵌套校验

    针对el-form的数据源是对象嵌套对象,在进行数据绑定和校验时和单层的对象有一点区别, 具体是下面两部分: 数据源: 1、 给 el-form-item 的 prop 设为: prop=\\\"health.height\\\" 。 v-model 设为: v-model=\\\"fromData.health.height\\\" 2、校验规则 rules 对象对应的key设置为数据源内部的值: \\\'health.heig

    2024年02月14日
    浏览(20)
  • el-form 动态表单增减项 (vue+element ui)

    el-form 动态表单增减项 (vue+element ui)

    1、点击”+“,弹出弹窗,新增一项,点击”-“,删除当前项 代码展示: html代码: 注意: el-form-item(表单项)循环,绑定的数组写在form当中 表单: 新增参数弹框: data: methods: 1、点击新增,弹出新增弹窗,添加表单项 2、点击”-“,删除当前表单项

    2024年02月02日
    浏览(12)
  • Vue+Element-UI el-form表单动态检验

    Vue+Element-UI el-form表单动态检验

    业务需求: 表单el-form 有一表单项:发布时间 ,有5个选项:今天、24小时、近3天、近7天和自定义时间,其中当选择自定义时间时,后面跟着的日期时间选择器是必填的,选中其他选项时则不需要。这就需要做到表单的动态检验。 最开始实现方式是在当前表单项中设置规则

    2024年02月11日
    浏览(11)
  • element plus el-form双列布局及拓展任意布局

    element plus el-form双列布局及拓展任意布局

    一般表单我们直接默认布局,也就是单列布局,突然有个人员信息表单,需要双列布局的需求,简单实现并拓展下 直接无脑div+flex布局实现 这样的无脑实现实在是对不起付出的时间,不嫩复用是最大问题 封装el-form,增加slot // Form.vue // index.vue 依然不够通用,因为布局是固定

    2024年01月25日
    浏览(11)
  • element-ui的el-form表单一行两个显示效果

    element-ui的el-form表单一行两个显示效果

    效果图:           代码: 因为代码重复所以这些只写了一份   css设置这些就ok了 

    2024年02月11日
    浏览(15)
  • 在vue项目里,Element-Ui中el-form 实现一行两个表单效果

    在vue项目里,Element-Ui中el-form 实现一行两个表单效果

    1.首先使用elementUi中的Layout 24分栏进行布局,将整个form表单放入24分栏里 如图所示: 2.再将需要同行显示的表单放入el-row中的el-col中去 3.然后再根据你的需求控制一下表单大小就ok啦  全部代码: 效果图如下:  

    2024年02月11日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包