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 中实现。

相关推荐
小林ixn8 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
REDcker8 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
এ慕ོ冬℘゜8 小时前
前端实战:jQuery 多条件联合搜索(标题模糊查询 + 日历时间段筛选)
前端·javascript·jquery
武子康8 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端
随心点儿9 小时前
js postMessage 实现跨域发送消息-应用示例
javascript·ecmascript·postmessage
一点一木9 小时前
从60首歌到1个网站:输入你的故事,还你一首歌
前端·github
IT_陈寒10 小时前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端
kyriewen10 小时前
我让AI改一个bug——它偷偷动了5个我没让它碰的地方
前端·javascript·ai编程
遇乐的果园11 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
用户9850335932812 小时前
OpenLayers 热力图从原理到 Vue 组件一键接入
前端