Vue_element-ui 表单校验问题

1. 表单校验问题一: this.$refs.xxxx.validate is not a function

由element-ui组件的文档中可知,若我们想要使用表单校验规则,我们需要有一下两步必须的操作

    1. el-form表单上面绑定ref=‘表单名称’ rules=‘表单规则’
              <el-form ref="cateForm"
                       :model="cateForm"
                       :rules="cateRules"
                       :inline="true"
              >
              </el-form>
    1. 进行校验
        this.$refs[formName].validate((valid) => {
          if (valid) {
            alert('submit!');
          } else {
            console.log('error submit!!');
            return false;
          }
        });

但在实验时发现,我有一个表单,正常按照上面步骤进行校验发现没有任何问题。但是在这个表单中还有一个表单,是一种嵌套的形式,此时我想要按照上面的this.$refs[formName]进行校验,报错
Error in v-on handler: "TypeError: this.$refs.xxxx.validate is not a function",此时我们需要这样,后面加上[0]即可解决问题.

        this.$refs[formName][0].validate((valid) => {
          if (valid) {
            alert('submit!');
          } else {
            console.log('error submit!!');
            return false;
          }
        });

此时我们会发现,打印this.$refs[formName],结果是一个数组[VueComponent],所以需要进行数组中取值这样的一种操作

2. 表单校验问题二:TS报错

JS语法时,我们按照官网提示实例,可以写法如下

        this.$refs[formName].validate((valid) => {
          if (valid) {
            alert('submit!');
          } else {
            console.log('error submit!!');
            return false;
          }
        });

但在TS时,会报错,认为我们的类型不明确···type 'Element | Vue | Vue[] | Element[]',可以写成这样

import { Form } from 'element-ui'
 (this.$refs['form'] as Form).validate((valid: boolean) => {
      if (valid) {
        this.submitData()
      } else {
        return false
      }
    })

对于需要[0]的这种形式,可以改写成这样
    const categoryForm: any = this.$refs.cateForm
    if (!categoryForm) return
    
    categoryForm[0].validate((valid: boolean) => {
      if (valid) {
        if (type === 'save') {
          return this.submitCateData()
        }
        if (type === 'edit') {
          return this.editCateData()
        }
      } else {
        return false
      }
    })

总结用法,希望可以帮助到你,
我是Ably,你无须超越谁,只要超越昨天的自己就好~

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值