关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

Posted huge1122

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题相关的知识,希望对你有一定的参考价值。

 

方法使用前需了解:

来自”和“小编的小提示:

首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form。

其次在拿到了正确的form后,检查该form上添加的表单验证是否正确,需要注意的点有:

1.使用此方法前检查prop一定必须要写在<el-form-item>上面,写在里面的input上或者其他任何地方都不行(el-form-item prop属性绑定)

2.el-form rules,model属性绑定,ref标识

自定义表单验证的坑:

 

一.validate/resetFields 未定义。

1:要验证的DOM,还没有加载出来。

2:有可能this.$refs[ruleForm].validate() 方式不识别。需要使用: this.$refs.ruleForm.validate(); 这种方式,不是你们想要的结果。

解决办法:

  1.  
    this.ticketDialog = true;
  2.  
     
  3.  
    //对整个表单进行重置,将所有字段值重置为初始值并移除校验结果
  4.  
     
  5.  
    this.$nextTick(function()
  6.  
     
  7.  
    this.$refs.ticketInfoForm.resetFields();
  8.  
     
  9.  
    )
或者:this.$refs[ruleForm].validate() 方式不识别。需要使用: this.$refs.ruleForm.validate();

那么如下所示:

  1.  
    methods:
  2.  
     
  3.  
    submitForm(ruleForm2)
  4.  
     
  5.  
    //官网 this.$refs[ruleForm2].validate();
  6.  
     
  7.  
    //在实际使用中,会报错。validate未定义
  8.  
     
  9.  
    //使用this.$refs.ruleForm2.validate(); 成功。
  10.  
     
  11.  
    this.$refs[ruleForm2].validate((valid) =>
  12.  
     
  13.  
    if (valid)
  14.  
     
  15.  
    alert(‘submit!‘);
  16.  
     
  17.  
    else
  18.  
     
  19.  
    console.log(‘error submit!!‘);
  20.  
     
  21.  
    return false;
  22.  
     
  23.  
  24.  
     
  25.  
    );
  26.  
     
  27.  
  28.  
     
  29.  

二. 数字类型的验证, 兼容mac和windows系统。

数字类型的验证需要在 v-model 处加上 .number 的修饰符,这是 Vue 自身提供的用于将绑定值转化为 number 类型的修饰符。
如下所示:

  1.  
    <el-form-item label="年龄" prop="age">
  2.  
    <el-input type="number" v-model.number="ruleForm2.age"></el-input>
  3.  
    </el-form-item>

如有不解,可以查看具体案例:

html:

  1.  
    <script src="//unpkg.com/vue/dist/vue.js"></script>
  2.  
    <script src="//unpkg.com/element-ui/lib/index.js"></script>
  3.  
    <div id="app">
  4.  
    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  5.  
    <el-form-item label="密码" prop="pass">
  6.  
    <el-input type="password" v-model="ruleForm.pass" auto-complete="off"></el-input>
  7.  
    </el-form-item>
  8.  
    <el-form-item label="确认密码" prop="checkPass">
  9.  
    <el-input type="password" v-model="ruleForm.checkPass" auto-complete="off"></el-input>
  10.  
    </el-form-item>
  11.  
    <el-form-item label="年龄" prop="age">
  12.  
    <el-input type="number" v-model.number="ruleForm.age"></el-input>
  13.  
    </el-form-item>
  14.  
    <el-form-item>
  15.  
    <el-button type="primary" @click="submitForm(‘ruleForm‘)">提交</el-button>
  16.  
    <el-button @click="resetForm(‘ruleForm‘)">重置</el-button>
  17.  
    </el-form-item>
  18.  
    </el-form>
  19.  
    </div>

js:

  1.  
    var Main =
  2.  
    data()
  3.  
    var checkAge = (rule, value, callback) =>
  4.  
    if (!value)
  5.  
    return callback(new Error(‘年龄不能为空‘));
  6.  
  7.  
    setTimeout(() =>
  8.  
    if (!Number.isInteger(value))
  9.  
    callback(new Error(‘请输入数字值‘));
  10.  
    else
  11.  
    if (value < 18)
  12.  
    callback(new Error(‘必须年满18岁‘));
  13.  
    else
  14.  
    callback();
  15.  
  16.  
  17.  
    , 1000);
  18.  
    ;
  19.  
    var validatePass = (rule, value, callback) =>
  20.  
    if (value === ‘‘)
  21.  
    callback(new Error(‘请输入密码‘));
  22.  
    else
  23.  
    if (this.ruleForm.checkPass !== ‘‘)
  24.  
    this.$refs.ruleForm.validateField(‘checkPass‘);
  25.  
  26.  
    callback();
  27.  
  28.  
    ;
  29.  
    var validatePass2 = (rule, value, callback) =>
  30.  
    if (value === ‘‘)
  31.  
    callback(new Error(‘请再次输入密码‘));
  32.  
    else if (value !== this.ruleForm.pass)
  33.  
    callback(new Error(‘两次输入密码不一致!‘));
  34.  
    else
  35.  
    callback();
  36.  
  37.  
    ;
  38.  
    return
  39.  
    ruleForm:
  40.  
    pass: ‘‘,
  41.  
    checkPass: ‘‘,
  42.  
    age: ‘‘
  43.  
    ,
  44.  
    rules:
  45.  
    pass: [
  46.  
    validator: validatePass, trigger: ‘blur‘
  47.  
    ],
  48.  
    checkPass: [
  49.  
    validator: validatePass2, trigger: ‘blur‘
  50.  
    ],
  51.  
    age: [
  52.  
    validator: checkAge, trigger: ‘blur‘
  53.  
    ]
  54.  
  55.  
    ;
  56.  
    ,
  57.  
    methods:
  58.  
    submitForm(ruleForm)
  59.  
    //官网 this.$refs[ruleForm].validate();
  60.  
    //在实际使用中,会报错。validate未定义
  61.  
    //
  62.  
    //使用this.$refs.ruleForm.validate(); 成功。
  63.  
    this.$refs.ruleForm.validate((valid) =>
  64.  
    if (valid)
  65.  
    alert(‘submit!‘);
  66.  
    else
  67.  
    console.log(‘error submit!!‘);
  68.  
    return false;
  69.  
  70.  
    );
  71.  
    ,
  72.  
    resetForm(formName)
  73.  
    this.$nextTick(function()
  74.  
    this.$refs[formName].resetFields();
  75.  
    )
  76.  
  77.  
  78.  
  79.  
    var Ctor = Vue.extend(Main)
  80.  
    new Ctor().$mount(‘#app‘)

以上介绍了" (vue.js)element ui 表单验证 this$refs[formName]validate"里面的小坑的问题解答,希望对有需要的网友有所帮助。

 

以上是关于关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于自定义的element-ui表单组件的校验

(vue.js)element ui 表单重置

Element-ui关于form表单的踩坑

关于element循环表单校验不生效问题

关于 Vue.js+Element-UI 日期控件 日期范围选择

简易登录表单的制作,包括用户名密码随机验证码(代码完整,复制即用)