elementui中rules的validator 用法

Element UI 中,rulesvalidator 是用于自定义校验规则的核心属性,适用于复杂或非标准验证逻辑。以下是完整用法说明:


✅ 基本结构

js 复制代码
rules: {
  fieldName: [
    {
      validator: (rule, value, callback) => {
        // rule:当前规则配置
        // value:当前字段值
        // callback:验证完成后的回调
        if (/* 验证失败 */) {
          callback(new Error('错误提示信息'));
        } else {
          callback(); // 验证通过
        }
      },
      trigger: 'blur' // 触发方式
    }
  ]
}

✅ 示例:用户名长度必须大于3

js 复制代码
data() {
  const validateUser = (rule, value, callback) => {
    if (!value || value.length <= 3) {
      callback(new Error('用户名长度必须大于3'));
    } else {
      callback();
    }
  };

  return {
    form: { user: '' },
    rules: {
      user: [
        { required: true, message: '请输入用户名', trigger: 'blur' },
        { validator: validateUser, trigger: 'blur' }
      ]
    }
  };
}
html 复制代码
<el-form :model="form" :rules="rules" ref="form">
  <el-form-item label="用户名" prop="user">
    <el-input v-model="form.user" />
  </el-form-item>
</el-form>

✅ 表单提交时触发验证

js 复制代码
this.$refs.form.validate(valid => {
  if (valid) {
    // 验证通过
  } else {
    // 验证失败
  }
});

✅ 高级用法:动态传参(如表格行)

如果你需要在校验函数中访问外部变量(如表格行数据),可以通过函数返回规则的方式实现:

js 复制代码
validatorQty(row) {
  return [{
    validator: (rule, value, callback) => {
      if (!value && !row.otherField) {
        callback(new Error('请至少选择一项'));
      } else {
        callback();
      }
    },
    trigger: 'blur'
  }];
}

然后在模板中:

html 复制代码
<el-form-item :rules="validatorQty(row)" prop="someField">
  <el-input v-model="row.someField" />
</el-form-item>

✅ 注意事项

  • callback() 必须调用,否则验证不会结束;
  • validator 支持异步校验(如接口校验),只需在异步完成后调用 callback()
  • 多个规则会按顺序执行,直到遇到第一个失败。

如需更复杂规则(如正则、联动校验、异步接口验证),都可以在 validator 中实现。

相关推荐
陈天伟教授1 小时前
人工智能训练师认证教程(2)Python os入门教程
前端·数据库·python
信看2 小时前
NMEA-GNSS-RTK 定位html小工具
前端·javascript·html
Tony Bai2 小时前
【API 设计之道】04 字段掩码模式:让前端决定后端返回什么
前端
爱吃大芒果2 小时前
Flutter 主题与深色模式:全局样式统一与动态切换
开发语言·javascript·flutter·ecmascript·gitcode
苏打水com3 小时前
第十四篇:Day40-42 前端架构设计入门——从“功能实现”到“架构思维”(对标职场“大型项目架构”需求)
前端·架构
king王一帅3 小时前
流式渲染 Incremark、ant-design-x markdown、streammarkdown-vue 全流程方案对比
前端·javascript·人工智能
苏打水com3 小时前
第十八篇:Day52-54 前端跨端开发进阶——从“多端适配”到“跨端统一”(对标职场“全栈化”需求)
前端
Bigger3 小时前
后端拒写接口?前端硬核自救:纯前端实现静态资源下载全链路解析
前端·浏览器·vite
BD_Marathon3 小时前
【JavaWeb】路径问题_前端绝对路径问题
前端