element的validate函数内部代码不执行,表单上属性都添加了

<!-- 新增用戶對話框\-->  
<el-dialog  
  title\="添加用戶"  
  :visible.sync\="dialogVisible"  
  width\="30%"  
  @close\="dialogClose"  
\>  
  <el-form :model\="newUserForm"  
  :rules\="newUserFormRules"  
  ref\="newUserFormRef"  
  label-width\="70px"  
  \>  
    <el-form-item label\="用户名" prop\="username"\>  
      <el-input v-model\="newUserForm.username"\></el-input\>  
    </el-form-item\>  
    <el-form-item label\="密码" prop\="password"\>  
      <el-input v-model\="newUserForm.password"\></el-input\>  
    </el-form-item\>  
    <el-form-item label\="邮箱" prop\="email"\>  
      <el-input v-model\="newUserForm.email"\></el-input\>  
    </el-form-item\>  
    <el-form-item label\="手机" prop\="mobile"\>  
      <el-input v-model\="newUserForm.mobile"\></el-input\>  
    </el-form-item\>  
  </el-form\>  
  <span slot\="footer" class\="dialog-footer"\>  
    <el-button @click\="dialogVisible \= false"\>取 消</el-button\>  
    <el-button @click\="addNewUser('newUserFormRef')" type\="primary"\>确 定</el-button\>  
  </span\>  
</el-dialog\>

方法数据部分

newUserForm: {  
  username: 'abc',  
  password: '123',  
  email: '123@qw.cn',  
  mobile: '12345678912'  
},
addNewUser (ref) {  
  this.$refs[ref].validate(async valid => {  
    console.log(1)  
    if (valid) {  
      const { data: res } = await this.$http.post('users', this.newUserForm)  
      if (res.meta.status !== 201) return this.$message.error('添加用户失败')  
  
      this.$message.success('添加用户成功')  
  
      this.dialogVisible = false  
      this.getUserList()  
    } else {  
      return this.$message.error('数据校验错误')  
    }  
  })  
}

data () {
const checkMobile \= (rule, value, callback) \=> {  
      setTimeout(() \=> {  
        if (value.toString().length <= 6) return callback(new Error('手机长度不合法'))  
      }, 1000)  
    }  
    const checkMail \= (rule, value, callback) \=> {  
      const regEmail \= /^\[a-zA-Z0-9\_-\]+@\[a-zA-Z0-9\_-\]+(\\.\[a-zA-Z0-9\_-\]+)+$/  
  setTimeout(() \=> {  
        if (regEmail.test(value)) {  
          callback()  
        } else {  
          callback(new Error('请输入合法的邮箱'))  
        }  
      }, 1000)  
    }
    return {
        newUserFormRules: {  
        username: \[  
          { required: true, message: '必填项', trigger: 'blur' },  
          { min: 3, max: 10, message: '长度在3-10之间', trigger: 'blur' }  
        \],  
        password: \[  
          { required: true, message: '必填项', trigger: 'blur' },  
          { min: 3, max: 10, message: '长度在3-10之间', trigger: 'blur' }  
        \],  
        email: \[  
          { required: true, message: '必填项', trigger: 'blur' },  
          { validator: checkMail, trigger: 'blur' }  
        \],  
        mobile: \[  
          { required: true, message: '必填项', trigger: 'blur' },  
          { validator: checkMobile, trigger: 'blur' }  
        \]  
      }
    
    }
}

按理说表单上prop我也是写在el-form-item上,属性都在,为什么一直执行不了,求大佬帮忙看看,谢谢

已解决 悬赏分:0 - 解决时间 2021-11-28 06:06
反对 0举报 0 收藏 0

回答3

最佳
  • @

    经过我的细心检查不是validate的问题,而是你的问题。
    this.$refs[ref].validate()是一个promise函数,我把它输出了一下,发现它一直是pending状态,证明它一直在执行(因为这是一个异步的,所以能输出4),也就是说你的rule有问题。
    事实证明你写的检查手机号的自定义规则有问题:你少写了一个callback(),以下是我改好的
    `
    const checkMobile = (rule, value, callback) => {

      setTimeout(() => {
        if (value.toString().length <= 6) {
          callback(new Error('手机长度不合法'))
        } else {
          // 这个else你没写
          callback()
        }
      }, 1000)
    }

    `

    支持 0 反对 0 举报
    2021-11-27 08:58
  • @

    你表单上面验证规则的这个对象:newUserFormRules 呢?这个是写规则和具体提示的

    支持 0 反对 0 举报
    2021-11-27 10:21
  • @

    直接浏览器里debug一下,看看方法有没有进去,然后再看看校验有没有进去。目测看起来不像是有错误的

    支持 0 反对 0 举报
    2021-11-27 10:36