深入了解Element Form表单动态验证问题 转载


 

随风丶逆风 2020-04-03 15:36:41  2208 Vue 随笔 文章标签: 动态验证 el-form elementUI 表单验证 《vue elementUI组件表单动态验证失效的问题与解决办法》中,讲到直接修改prop属性,未触发form-item的重新渲染,所以虽然有校验*的标志,实际上并不会校验。这是表面现象,最近有了空余时间,去看看了element form组件的源码,找到了根本原因。

《vue elementUI组件表单动态验证失效的问题与解决办法》中讲的强制重新渲染form-item,当时不知道根本原因采用的笨办法。
  • form-item保留prop属性,根据条件动态修改form组件的rules对象。比如下面这样:
  • watch: {
      'formData.age': {
        immediate: true,
        handler (newVal) {
          if (newVal >= 18) {
            this.addRule('bankCardNo', [{ required: true, message: '请输入银行卡号', trigger: 'blur' }])
          } else {
            this.addRule('bankCardNo', [])
          }
        }
      }
    }
    
    data () {
      return {
        rules: {}
      }
    },
    
    methods: {
      addRule (prop, rule) {
        this.$set(this.rules, prop, rule)
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    1. form-item保留prop属性,根据条件动态修改form-item组件的rules属性。比如下面两种方式,因为rules属性接受数据和对象。
    label="银行卡号" prop="bankCardNo" :rules="formData.age >= 18 ? [{ required: true, message: '请输入银行卡号', trigger: 'blur' }] : []">
      v-model="formData.bankCardNo">>
    >
    
    
    label="银行卡号" prop="bankCardNo" :rules="formData.age >= 18 ? { required: true, message: '请输入银行卡号', trigger: 'blur' } : []">
      v-model="formData.bankCardNo">>
    >
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    总结

    终须由浅入深,浮于表面便是管中窥豹,自身还需静下心认真研究

    vue