• element ui中el-form-item的属性rules的用法


    目录

    el-form-item的属性rules的用法

    栗子 

    总结 

    实践应用

    一、 定义静态的校验规则

    二、定义动态的校验规则


    el-form-item的属性rules的用法

    在学习element ui 的Form表单组件时,学到el-form-item也有rules属性,但是对应这个属性如何使用,却一直用不对,百度查资料也没查到,

    通过自己多方面测试,终于了解到了el-form-item也有rules属性的用法,现在总结分享给大家!

    栗子 

    表单域的验证规则:

            1.只有一条时,el-from-item 的属性rules绑定的变量的值为一个对象,对象中规定验证规则

            2.有多条时,el-from-item 的属性rules绑定的变量的值为一个对象数组,数组中的每一个对象元素都对应一条验证规则


    总结 

    在使用Element UI的el-form组件进行表单验证时,如果同时在el-form上绑定了rules,并且在单独的el-form-item上也绑定了rules,那么Element UI会将两者的规则合并使用。具体来说,对于同一个字段,如果el-formel-form-item都有对应的验证规则,那么el-form-item上的规则会覆盖el-form上的规则。

    这里是如何工作的:

    1. el-form的rules:这是表单级别的验证规则,适用于表单内所有字段。如果表单中的某个字段没有在el-formrules中明确指定规则,那么它将不会进行验证。

    2. el-form-item的rules:这是字段级别的验证规则,只适用于绑定到该el-form-item的特定字段。如果字段在el-formrules中也有规则,el-form-item中的规则将会覆盖表单级别的规则。

    例如,如果有一个表单字段username,你在el-form上定义了一个规则,要求用户名至少为5个字符,然后在对应的el-form-item上定义了一个规则,要求用户名必须以"admin"开头,那么最终username字段的验证规则将是必须以"admin"开头。

    1. // el-form的rules
    2. {
    3. rules: {
    4. username: [
    5. { required: true, message: '用户名是必填项', trigger: 'blur' },
    6. { min: 5, message: '用户名至少为5个字符', trigger: 'blur' }
    7. ]
    8. }
    9. }
    10. // el-form-item的rules
    11. <el-form-item prop="username">
    12. <el-input v-model="form.username"></el-input>
    13. <template slot="rules">
    14. [
    15. { validator: customValidator, trigger: 'blur' }
    16. ]
    17. </template>
    18. </el-form-item>

     

    在这个例子中,customValidator是一个自定义的验证函数,它将检查用户名是否以"admin"开头。这个规则将覆盖el-form中对username字段的最小字符长度要求。

    需要注意的是,合并规则时,el-form-item上的规则会优先应用,但是el-form上的规则仍然可以为其他没有在el-form-item上定义规则的字段提供验证。

    实践应用

    一、 定义静态的校验规则

    1. 如template
    1. <el-form
    2. ref="condFormRef"
    3. id="condForm"
    4. :model="cond"
    5. label-width="100px"
    6. size="mini"
    7. :rules="condFormRules"
    8. >
    9. <!-- rules 内嵌在el-form-item -->
    10. <el-form-item label="名称:" prop="name" :rules="{required: true, message: '请输入名称', trigger:'blur'}">
    11. <el-input
    12. v-model="cond.name">
    13. </el-input>
    14. </el-form-item>
    15. <el-form-item label="预算:" prop="budget">
    16. <el-input
    17. style="width:60%"
    18. v-model="cond.budget"
    19. maxlength="15"
    20. clearable>
    21. </el-input>
    22. <small>&nbsp;元</small>
    23. </el-form-item>
    24. </el-form>
    1. 在form 上定义上绑定 rules 属性, 给需要校验的item 增加prop 属性, prop 值需要个rules中的keys 保持一致
    1. condFormRules:{
    2. budget:[//带prop的
    3. {required: true, message: '', trigger: ['blur','change']},
    4. {validator: validateBudget, trigger: 'blur'},
    5. ],
    6. }

     说明:
    (1) required: 是否必填, true则显示红星星, 当设置了必填时, 必须有message, 哪怕为空,否则不填时给默认提示"budget is required"

    注意: 如{message: 'aaaaaaaa', trigger: ["blur","change"]},  没有required,则会校验,但上次校验失败的信息不会自动消失, 即要有message时, 必须有required
      

    (2) trigger: 可选["blur","change"]触发执行校验的事件 blur:失去焦点时, change:数据改变时

         this.$refs.condFormRef.validate() 时,trigger都会执行
    

    (3) validator:自定义校验属性,可以定义自己的校验规则,如validateBudget自定义的规则函数, 校验逻辑复杂时可以自定义函数实现。
    如下校验逻辑复杂的:要求数字且正整数或最多带两位的小数

    1. var validateBudget=(rule, value, callback) => {
    2. if(!value || !Number(value)){ //不输入或输0.00.00时,都进入
    3. callback(new Error('请输入预算'));
    4. }
    5. else if(!(/(^[1-9]\d*(\.\d{1,2})?)$/.test(value) || /(^[0](\.\d{1,2}){1})$/.test(value))){
    6. callback(new Error('请输入正整数或最多带两位的小数'));
    7. }
    8. else{
    9. callback();
    10. }
    11. };

     校验输入数字简单时,可以直接写在模板中, 如限制输入数字

    1. <el-input
    2. style="width:60%"
    3. v-model="cond.budget"
    4. maxlength="15"
    5. @input="cond.budget = cond.budget.replace(/[^\d]/g, '')" //非数字的全局替换成空
    6. clearable>
    7. </el-input>

    二、定义动态的校验规则


    当我们的表单项是动态生成的, 又需要对其进行输入值的校验, 怎么做呢?????
    比如添加一个用户信息,让其输入并校验

    1. <el-col :span="6">
    2. <el-button @click="addInfo">添加学生信息</el-button>
    3. <el-form ref="testForm" :model="testModel" label-width="100px">
    4. <div
    5. style="border: 1px solid #000000"
    6. v-for="(info, index) of testModel.studentsInfos"
    7. :key="'info_'+index"
    8. >
    9. <el-form-item
    10. label="名字"
    11. :prop="'studentsInfos.' + index + '.name'"
    12. :rules="{required: true, message: '请输入名称', trigger:'blur'}"
    13. >
    14. <el-input v-model="info.name"></el-input>
    15. </el-form-item>
    16. <el-form-item
    17. label="年龄"
    18. :prop="'studentsInfos.' + index + '.age'"
    19. :rules="validateAge"
    20. >
    21. <el-input v-model="info.age"></el-input>
    22. </el-form-item>
    23. <el-form-item
    24. label="性别"
    25. :prop="'studentsInfos.' + index + '.sex'"
    26. :rules="{required: true, message: '请选择性别', trigger:'change'}"
    27. >
    28. <el-select v-model="info.sex">
    29. <el-option label="男" value="man"></el-option>
    30. <el-option label="女" value="women"></el-option>
    31. </el-select>
    32. </el-form-item>
    33. </div>
    34. <el-form-item label="">
    35. <el-button @click="testSave">保存</el-button>
    36. </el-form-item>
    37. </el-form>
    38. </el-col>

    效果图如下

    1. data() {
    2. return {
    3. testModel:{studentsInfos: []
    4. },
    5. validateAge: [
    6. {required: true, message: "请输入您的年龄", trigger: ['blur', 'change']},
    7. {validator: (rule, value, callback)=>{
    8. if(value&& !(/^\d+$/g).test(value)){
    9. callback(new Error("请输入数字"))
    10. }
    11. callback()
    12. }
    13. }
    14. ]
    15. }

     

    1. methods: {
    2. addInfo(){
    3. this.testModel.studentsInfos.push({name: "", age: "", sex: ""})
    4. },
    5. testSave(){
    6. this.$refs['testForm'].validate((valid)=>{
    7. if(valid){
    8. console.log("校验通过, 可以保存了")
    9. }
    10. else{
    11. console.log("校验失败")
    12. }
    13. })
    14. },
    15. }

  • 相关阅读:
    【安装笔记-20240529-Windows-Electerm 终端工具】
    电脑监控软件:保护企业核心信息资产,防止数据泄露
    FFplay播放avsync学习
    postman接口测试—Restful接口开发与测试
    Hive3第一章:环境安装
    六级高频词汇
    源码编译net-snmp
    Mysql类的封装
    【Java进阶】多线程(一)
    加权迭代最小二乘法在线估计锂电池容量研究
  • 原文地址:https://blog.csdn.net/qq_63358859/article/details/140460592