vue element ui From表单校验不生效问题解决


仅供参考 自我记录.

解决方案① el-from上要使用:model不要使用v-model

 <el-form ref="ruleForm" :model="testForm" label-width="100px" :rules="rules">

解决方案② el-from-item上是否有加prop,并确定prop是不是和编写的规则相同

  <el-form-item label="活动名称" prop="name">
    <el-input v-model="testForm.name"></el-input>
  </el-form-item>
  // 校验规则 prop name相同
   rules: {
    	name: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
          ]
       }

解决方案③$refs[formName]$refs.formName注意事项 前者提交的时候要传参@click="submitForm('ruleForm')" 不然不生效

//官方的写法是$refs[formName]  
 <el-form ref="ruleForm" :model="testForm" label-width="100px" :rules="rules">
  <el-form-item label="活动名称" prop="name">
    <el-input v-model="testForm.name"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
  </el-form-item>
 <el-form>
 data() {
    return {
    testForm:{
        name:'',
      },
   rules: {
    	name: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
          ]
       }
    }
  },
 methods: {
    // 第一种方法要接收参数 并且$refs[formName]
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            alert('submit!');
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },
//网上也有用 $refs.formName 第二种写法的 
 <el-form ref="ruleForm" :model="testForm" label-width="100px" :rules="rules">
  <el-form-item label="活动名称" prop="name">
    <el-input v-model="testForm.name"></el-input>
  </el-form-item>
  <el-form-item>
  // 不需要传参 第二种方式
    <el-button type="primary" @click="submitForm()">提交</el-button>
  </el-form-item>
 <el-form>
 data() {
    return {
    testForm:{
        name:'',
      },
   rules: {
    	name: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
          ]
       }
    }
  },
 methods: {
    // 第二种方法不需要接收参数 并且$refs.formName
      submitForm() {
        this.$refs.formName.validate((valid) => {
          if (valid) {
            alert('submit!');
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },

解决方案④网上有人说 未在data里面声明初始数据也会报错(未复现.解决方案仅供参考)

  <el-form-item label="活动名称" prop="name">
    <el-input v-model="testForm.name"></el-input>
  </el-form-item>
 data() {
    return {
  // 校验规则 prop name相同
    testForm:{
        name:'',//意思是这个位置没有声明 name 也会不生效 我测试了一下不声明也生效 仅供参考
      },
   rules: {
    	name: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
          ]
       }
    }
  }

平时遇到的一些小问题 自我记录 有补充的地方希望大家多多提出意见 共同学习!
如有转载 请备注原文地址!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐