验证失败:

在使用 Element-UI 时,按照官方实例编写表单验证规则,却总是验证失败。当点击提交时会发现,明明表单已经填写了,页面还是提示未填写;明明填写正确了,页面还是提示不正确。如下图:

屏幕截图 2020-12-23 180801

使用方法:

在 ElementUI 中,可以通过在 <el-form> 标签中将 rules 属性绑定 Vue 中自定义的规则数组,然后在 <el-form-item> 标签中使用 prop="xxx" 调用特定规则,实现表单验证的功能,代码如下:

<!-- 通过 :rules="diyRules" 绑定自定义的规则数组 -->
<el-form :model="form" :rules="diyRules" ref="ruleForm" label-width="100px">
  	<!-- 通过 prop="name" 调用规则数组里的 nameRule 规则 -->
    <el-form-item label="活动名称" prop="nameRule">
    <el-input v-model="ruleForm.name"></el-input>
  </el-form-item>

  <el-form-item label="活动形式" prop="descRule">
    <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-form-item>
</el-form>

<script>
  export default {
    data() {
      return {
        form: {
          name: '',
          desc: ''
        },
        diyRules: { //自定义规则:
          nameRule: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
          ],
          descRule: [
            { required: true, message: '请填写活动形式', trigger: 'blur' }
          ]
        }
      };
    },
    methods: {
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            // 向后台发送数据
          } else {
            console.log('表单验证失败!');
            return false;
          }
        });
      }
    }
  }
</script>

上面的列子中具体的操作大致如下:

  • 在 Vue 里面 return 了一个名叫 diyRules 的规则数组,数组里定义了 nameRule 和 descRule 两个规则。

  • 在 <el-form> 标签中使用 :rules="diyRules" 绑定该数组

  • 在 <el-form-item> 标签中使用 prop="nameRule" 调用数组里的 nameRule 规则

解决方法:

原来,prop 对应的不单单是 rules 规则里面的验证项,同时应该对应着我们 <el-form> 下的 model 绑定的值。prop绑定的类要与 <el-form> 的 model 绑定的值相对应。

而上列中 model 绑定的是 form 对象,form 里面有 name 和 desc 两个数据,所以自定义的规则的名字是不能随便取得,而要和 form 里的一样!

修改方法:将 diyRules 里的两个: nameRule、descRule 规则改名为 name、desc,保持和 form 里的值一样。

修改后的代码如下:

<!-- 通过 :rules="diyRules" 绑定自定义的规则数组 -->
<el-form :model="form" :rules="diyRules" ref="ruleForm" label-width="100px">
  	<!-- 通过 prop="name" 调用规则数组里的 name 规则 -->
    <el-form-item label="活动名称" prop="name">
    <el-input v-model="ruleForm.name"></el-input>
  </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-form-item>
</el-form>

<script>
  export default {
    data() {
      return {
        form: {
          name: '',
          desc: ''
        },
        diyRules: { //自定义规则:
          name: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
          ],
          desc: [
            { required: true, message: '请填写活动形式', trigger: 'blur' }
          ]
        }
      };
    },
    methods: {
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            // 向后台发送数据
          } else {
            console.log('表单验证失败!');
            return false;
          }
        });
      }
    }
  }
</script>

验证成功:

屏幕截图 2020-12-23 180844

Logo

前往低代码交流专区

更多推荐