el-form自定义规则后表单验证validate不生效的问题

1.首先放出结论,自定义验证规则必须降所有的可能全部都return callback出去,不然不会走validate

错误示范

复制代码
// template
<el-form
      ref="ruleFormRef"
      :model="ruleForm"
      :rules="rules"
      label-width="120px"
      class="demo-ruleForm"
    >
      <el-form-item label="名字" prop="name">
        <el-input v-model="ruleForm.name" />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submitForm">验证</el-button>
      </el-form-item>
    </el-form>

//script
import { reactive, ref } from "vue";
const ruleForm = reactive({
  name: "",
});
const nameChange = (rule, value, callback) => {
  if (!value) {
    return callback(new Error("请填写名字"));
  }
};
const rules = {
  name: [
    {
      validator: nameChange,
      trigger: "blur",
    },
  ],
};
const submitForm = async () => {
  ruleFormRef.value.validate((valid) => {
    if (valid) {
      alert("ok");
    } else {
      alert("no");
    }
  });
};

2.效果如下

3.可以看到含有return callback的未填写情况是触发了ruleFormRef.value.validate,可以获取到valid的问题,但是填写了之后是不会走valid的,

4.将规则修改,使得填写之后的表单验证也有对应的return callback

复制代码
const nameChange = (rule, value, callback) => {
  if (!value) {
    return callback(new Error("请填写名字"));
  } else {
    return callback();
  }
};

5.这样的条件下就可以验证表单无问题时的valid

相关推荐
JunjunZ1 小时前
Naive UI 虚拟级联选择器适配 Element Plus 风格
前端·javascript·vue.js
闲坐含香咀翠3 小时前
百万行数据透视表,我是怎么把 Vue 响应式开销砍到零的
前端·vue.js·性能优化
用户302822530683 小时前
别让 Agent 被 Webhook 叫醒就开工:实现一个幂等启动层
javascript
许彰午3 小时前
34-安全复盘96个问题
前端·vue.js·安全
万少4 小时前
等不到 Apple 的折叠 iPhone,我用 DeepV4.1Flash + workBuddy 一句话自己造了一台
前端·javascript·后端
志尊宝4 小时前
Vue3 零基础每日笔记(009):watch 侦听器——数据一变就“做事“
vue.js·笔记·缓存
一夜枫林4 小时前
vue实现scroll-view上下滑动右侧左右滑动
前端·javascript·vue.js
志尊宝5 小时前
Vue3 零基础每日笔记(011):生命周期钩子——在正确的时间做正确的事
javascript·vue.js·笔记
YWL5 小时前
OpenLayers地图分享:URL参数同步+分享链接生成,让用户一键分享地图视角
前端·javascript·vue·openlayers
卤蛋fg65 小时前
vue 甘特图组件 vxe-gantt 依赖连接线可视化拖拽创建与双击删除
vue.js