美文网首页
element 动态表单检验

element 动态表单检验

作者: 冰落寞成 | 来源:发表于2022-08-23 09:09 被阅读0次

    一、要实现的效果

    element 表单提取成公共组件,prop 字段是动态的,双向绑定的值也是动态的,这时候想要添加动态表单校验


    1661302886833.png

    二、 实现办法

    1、静态的表单校验,在<el-form> 标签上添加rules,并定义校验规则,如一下代码所示:

    <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>
    <script>
      export default {
        data() {
          return {
            ruleForm: {
              name: '',
             
            },
            rules: {
              name: [
                { required: true, message: '请输入活动名称', trigger: 'blur' },
                { min: 3, max: 5, message: '长度在 3 到 5 个字符', 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>
    

    2、动态规则校验,在<el-form-item> 标签上添加rules 规则校验,代码如下:

    <el-form :model="publishFrom" ref="publishFrom" label-width="100px">
          <el-form-item class="w700" :label="`${publishTitle}标题`" :prop="options.title" :rules="{ required: true, message: `请输入${publishTitle}标题`, trigger: 'blur' }">
            <el-input v-model="publishFrom[options.title]"></el-input>
          </el-form-item>
        </el-form>
      </div>
    </template>
    <script>
    export default {
     
      props: {
        formData: { // 表单数据
          type: Object,
          default: () => {}
        },
        publishTitle: {
          type: String,
          default: () => '发布'
        },
        defaultProps: { // 表单配置项
          type: Object,
          default: () => {}
        },
       
      },
    
      watch: {
        defaultProps: { // 表单配置项
          deep: true,
          handler: function (val) {
            this.options = { ...this.options, ...val }
          }
        },
      },
      data () {
        return {
    
          publishFrom: {
            id: null, //唯一标识
            title: '', // 标题
          },
      
          options: { // 表单配置项
            id: 'id', // 唯一标识
            title: 'title', // 标题
    
          }
    
        }
      },
      created () {
        this.options = { ...this.options, ...this.defaultProps }
      },
      methods: {
      }
    }
    </script>
    
    

    相关文章

      网友评论

          本文标题:element 动态表单检验

          本文链接:https://www.haomeiwen.com/subject/pkbngrtx.html