vue表单及遍历表单校验rules以及validator校验器的使用

这篇具有很好参考价值的文章主要介绍了vue表单及遍历表单校验rules以及validator校验器的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为防止用户犯错,尽可能更早地发现并纠正错误。

Element中Form (表单)组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可。

注意:prop对应表单域 model 字段,使用 validate方法时,该属性是必填的。

目录

表单验证rules

自定义校验规则

单个表单域上传递验证规则

遍历表单校验规则(动态增减表单项)

嵌套遍历表单校验规则


表单验证rules

以官网给出的例子分析来看

将prop 属性设置为需校验的字段名。

vue rules validator,前端开发,前端框架,Vue,前端,前端框架,elementui,vue.js

 在data里配置要校验字段和校验规则:

required:true表示为必须输入;

message:""设置不符合校验规则时的提示信息;

trigger:""设置校验的触发方式:

        ‘change’:数据改变时触发;

        ‘blur’:失去焦点时触发;

        没有进行任何输入时,不会触发change,但一定会触发blur事件。

vue rules validator,前端开发,前端框架,Vue,前端,前端框架,elementui,vue.js

设置校验规则后,表头会出现红色*样式

vue rules validator,前端开发,前端框架,Vue,前端,前端框架,elementui,vue.js

该示例完整代码:

<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>

自定义校验规则

除此之外,我们还可以使用validator验证器来自定义校验规则,

举一个使用自定义验证规则来完成密码的二次验证的例子。

vue rules validator,前端开发,前端框架,Vue,前端,前端框架,elementui,vue.js

还是和之前一样,设置prop需校验的字段名和v-model绑定值

vue rules validator,前端开发,前端框架,Vue,前端,前端框架,elementui,vue.js

 但这时,我们需要在data中自己定义校验规则,需要注意的是,设置的规则与return同级。

vue rules validator,前端开发,前端框架,Vue,前端,前端框架,elementui,vue.js

 在rules中配置要校验的字段和用到的规则

 vue rules validator,前端开发,前端框架,Vue,前端,前端框架,elementui,vue.js

完整代码如下:

<el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  <el-form-item label="密码" prop="pass">
    <el-input type="password" v-model="ruleForm.pass" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item label="确认密码" prop="checkPass">
    <el-input type="password" v-model="ruleForm.checkPass" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item label="年龄" prop="age">
    <el-input v-model.number="ruleForm.age"></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() {
      var checkAge = (rule, value, callback) => {
        if (!value) {
          return callback(new Error('年龄不能为空'));
        }
        setTimeout(() => {
          if (!Number.isInteger(value)) {
            callback(new Error('请输入数字值'));
          } else {
            if (value < 18) {
              callback(new Error('必须年满18岁'));
            } else {
              callback();
            }
          }
        }, 1000);
      };
      var validatePass = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请输入密码'));
        } else {
          if (this.ruleForm.checkPass !== '') {
            this.$refs.ruleForm.validateField('checkPass');
          }
          callback();
        }
      };
      var validatePass2 = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请再次输入密码'));
        } else if (value !== this.ruleForm.pass) {
          callback(new Error('两次输入密码不一致!'));
        } else {
          callback();
        }
      };
      return {
        ruleForm: {
          pass: '',
          checkPass: '',
          age: ''
        },
        rules: {
          pass: [
            { validator: validatePass, trigger: 'blur' }
          ],
          checkPass: [
            { validator: validatePass2, trigger: 'blur' }
          ],
          age: [
            { validator: checkAge, 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>

单个表单域上传递验证规则

除了在 Form 组件上一次性传递所有的验证规则外还可以在单个的表单域上传递属性的验证规则

示例:

 <el-form-item
    prop="email"
    label="邮箱"
    :rules="[
      { required: true, message: '请输入邮箱地址', trigger: 'blur' },
      { type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
    ]"
  >
    <el-input v-model="dynamicValidateForm.email"></el-input>
  </el-form-item>

遍历表单校验规则(动态增减表单项)

vue rules validator,前端开发,前端框架,Vue,前端,前端框架,elementui,vue.js

 prop需设置为 "遍历数据" + "."+ "遍历索引" + "." + "校验数据"

<el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic">
  <el-form-item
    v-for="(domain, index) in dynamicValidateForm.domains"
    :label="'域名' + index"
    :key="domain.key"
    :prop="'domains.' + index + '.value'"
    :rules="{
      required: true, message: '域名不能为空', trigger: 'blur'
    }"
  >
    <el-input v-model="domain.value"></el-input><el-button @click.prevent="removeDomain(domain)">删除</el-button>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="submitForm('dynamicValidateForm')">提交</el-button>
    <el-button @click="addDomain">新增域名</el-button>
    <el-button @click="resetForm('dynamicValidateForm')">重置</el-button>
  </el-form-item>
</el-form>

嵌套遍历表单校验规则

  prop需设置为 "父级遍历数据" + "." + "遍历父级索引" + "." + "子级遍历数据" +  "遍历子级索引"  +  "."  +  "校验数据"

<div v-for="(item1,key1) in form.list1)" :key="key1">
    <div v-for="(item,index) in item1.list" :key="index">
        <el-form-item label="名称:" :prop="list1.'+key1+'.list.'+ index + '.name'"
        :rules="{required: true,message:'名称不能为空',trigger: 'blur'}">
            <el-input v-model="item1.name" placeholder="请输入名称"/>
        </el-form-item>
    </div>
</div>

 文章来源地址https://www.toymoban.com/news/detail-716785.html

到了这里,关于vue表单及遍历表单校验rules以及validator校验器的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • vue表单验证rules无效,rules动态选择,rules动态校验,rules对象嵌套校验

    一、问题描述 这里由一个动态切换规则校验引发的一些问题,整理了下,如下文所示。 这里有个需求就是,动态切换radio,对input输入框校验,界面如下 在网上找了一圈,用了第一种方法来解决,动态添加验证规则,方法如下 通过if判断platformType是否等于2,然后添加规则,

    2023年04月19日
    浏览(26)
  • vue中的rules表单校验规则使用方法 :rules=“rules“

    :ref=\\\"dataForm\\\"        // 提交表单时进行校验 :rules=\\\"rules\\\"            // return 下的校验规则 :model=\\\"userForm\\\"  // 绑定表单的值 点击提交时,会先对表单的值进行校验判断,校验通过后,再进行后续操作。 el-form-item 里面使用 prop 属性绑定规则 el-form-item label=\\\"充值金额\\\"  prop=\\\"amo

    2024年02月05日
    浏览(29)
  • for循环遍历的`form表单组件`rules规则校验失效问题——下拉框选择之后还是报红---亲测有效

    问题:   大概的效果就是这种, for循环选择之后还是还是报红 看文章之前 :  先检查  model  rules pops 有没有判定好 解决:    参考了他的 for循环遍历的`form表单组件`rules规则校验失效问题——输入内容后依然提示必填,亲测有效——基础积累_a-form-model的validatefield方法循环遍

    2024年02月07日
    浏览(24)
  • vue+element多层表单校验prop和rules

    核心点:外层循环是item和index,内层循环是item2和index2 如果都是定义的同一个属性名 外层循环得写 :prop=\\\"\\\'block.\\\'+index+\\\'.numerical\\\'\\\" 同理内层循环就得写 :prop=\\\"\\\'objectSpecs.\\\'+ index2 + \\\'.numerical\\\'\\\" 校验函数方法 :rules=\\\"getRules(item2, item2.name)\\\"

    2024年02月13日
    浏览(20)
  • Vue中form表单校验rules的问题(对象数组过滤新对象数组 ,对象校验,数组校验,)

    const data = reactive({ form: { js //往数组中添加这八个相机配置参数 for(var i=0;i8;i++){ const clonedLightObject1 = { …data.form.lightObject1 }; clonedLightObject1.productNameId=pid clonedLightObject1.cameraType=i clonedLightObject1.shootingNumber=1 页面

    2024年02月08日
    浏览(31)
  • vue自定义rules,对input表单输入框校验重复值

    对input表单输入框检验重复值,如对如下图参数名进行校验重复值  el-form-item添加属性:rules=\\\"rules.paramname\\\" 1.写一个rules 2.Method里面添加如下方法 rule:指的是表单中rules属性 value:指的表单输入框中输入的值 callback:回调函数(再次调用校验函数)

    2024年02月11日
    浏览(29)
  • Element ui form表单上传图片以及图片回显后提交表单validate校验失败

    1.页面加载时,由于接口响应参数赋值给初始化form表单的值时,造成初始化的imageCode值丢失。 下面展示一些 内联代码片 。 第一种情况 form表单赋值不正确 1.接口请求数据后直接赋值,导致imageCode属性丢失 说明 1.不能直接采用this.form=data;给form赋值,返回接口中没有imageCode时

    2024年02月06日
    浏览(25)
  • 【Vue3+Ts project】vant4 实现触发指定表单 rules校验、setTimeout和 setInterval 区别

      一.使用 vant组件  validate属性 实现 触发指定输入框rules校验 ,满足校验通过否则失败  1. 给form表单绑定 ref并定义值名称 ,然后为你想校验的表单绑定 name值 2.为ref的值名称定义变量名 ,然后 ref值名称.value.validate(\\\'name值名称\\\'),.then接收成功 , .catch 接收失败   二. setT

    2024年02月11日
    浏览(34)
  • 关于表单校验,:rules=“loginRules“

     在写好validator相关的方法后,rule测试没有生效 el-form ref=\\\"loginForm\\\" :model=\\\"loginForm\\\" :rules=\\\"loginRules\\\" class=\\\"login-form\\\" el-form-item prop=\\\"username\\\" el-input           ref=\\\"username\\\"           v-model=\\\"loginForm.username\\\"           placeholder=\\\"Username\\\"           name=\\\"username\\\"

    2024年02月03日
    浏览(17)
  • vue3中,form表单校验之特殊字符校验、手机号、身份证号、百分制数字 & route和router的写法 & setup的两种用法 & rules中校验之blur和change

    vue3中,form表单校验之特殊字符校验、手机号、身份证号、百分制数字 route和router的写法 setup的两种用法 rules中校验之blur和change 1、写法一 index.vue 2、写法二完整版 index.vue 2、校验文件 srcutilsvalidate.ts

    2024年02月05日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包