开源Vue组件 FormCreate 使用组件内部方法校验

FormCreate 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的低代码表单生成组件。它支持 7 个 UI 框架,适配移动端,并且支持生成任何 Vue 组件。内置 20+ 种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定

文档 | GitHub | Gitee

通过自定义属性 componentValidate 可以实现在自定义组件内部进行表单验证。这个功能非常适合在自定义组件中实现特定的业务逻辑验证,确保用户输入的数据符合预期。

类型

ts 复制代码
// 可以自定义组件内方法的名称,默认为 `formCreateValidate`
type ComponentValidate = string | boolean;

注意

不同的 UI 框架对验证的实现方式可能有所不同,建议参考所使用 UI 框架的官方文档中的表单验证规则部分,了解 validator 的具体实现方式。

教程

1. 在自定义组件内部实现 formCreateValidate 方法

在自定义组件中定义一个名为 formCreateValidate 的方法,该方法将在表单验证时被调用。你可以根据业务逻辑在这个方法中编写验证规则。

js 复制代码
export default {
    methods: {
        formCreateValidate(rule, value, callback) {
            // 自定义验证逻辑
            if (value === 'form-create') {
                callback(); // 验证通过
            } else {
                callback('请输入`form-create`'); // 验证不通过,返回错误信息
            }
        }
    }
}

在 Setup 中使用

vue 复制代码
<script setup>
  defineExpose({
    formCreateValidate(rule, value, callback) {
      // 自定义验证逻辑
      if (value === 'form-create') {
        callback(); // 验证通过
      } else {
        callback('请输入`form-create`'); // 验证不通过,返回错误信息
      }
    }
  })
</script>

2. 设置componentValidate属性

在生成规则中,通过 componentValidate 属性启用组件内部验证。

js 复制代码
const rule = {
    type: 'custom-component',
    field: 'customField',
    title: '自定义组件',
    effect: {
        componentValidate: true
    }
}

如果你希望使用不同的方法名,而不是默认的 formCreateValidate,可以在 componentValidate 属性中指定自定义的方法名:

js 复制代码
const rule = {
  type: 'custom-component',
  field: 'customField',
  title: '自定义组件',
  effect: {
    componentValidate: 'myCustomValidateMethod'
  }
}

示例

以下是一个简单的示例,展示了如何在自定义组件中使用 componentValidate 进行表单验证:

复杂的输入验证

在一些业务场景中,你可能需要在自定义组件内进行更复杂的验证,例如检查输入是否符合特定的格式或规则。

js 复制代码
export default {
  methods: {
    formCreateValidate(rule, value, callback) {
      // 假设我们希望验证输入是否为有效的电子邮件地址
      const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
      if (emailRegex.test(value)) {
        callback(); // 验证通过
      } else {
        callback('请输入有效的电子邮件地址');
      }
    }
  }
};

表单依赖项的验证

在一些复杂表单中,某些字段的验证逻辑可能依赖于其他字段的值。例如,如果一个选项被选中,另一个输入字段必须满足特定的条件。

js 复制代码
export default {
    props: {
        dependentValue: {
            type: String,
            required: true
        }
    },
    methods: {
        formCreateValidate(rule, value, callback) {
            if (this.dependentValue === 'special' && value !== 'expected') {
                callback('当 dependentValue 为 special 时,输入必须为 expected');
            } else {
                callback();
            }
        }
    }
};

异步验证

在某些情况下,验证可能需要与服务器交互,例如检查用户名是否已被占用。这时可以使用异步验证。

js 复制代码
export default {
  methods: {
    formCreateValidate(rule, value, callback) {
      if (!value) {
        return callback('用户名不能为空');
      }
      // 模拟异步请求
      setTimeout(() => {
        if (value === 'alreadyTaken') {
          callback('用户名已被占用');
        } else {
          callback(); // 验证通过
        }
      }, 1000);
    }
  }
};

多字段关联验证

当多个字段的值需要进行关联验证时,可以在一个字段中触发对其他字段的验证。

js 复制代码
export default {
    methods: {
        formCreateValidate(rule, value, callback, {api}) {
            const fieldValue = api.getValue('relatedField');
            if (value !== fieldValue) {
                callback('当前字段的值必须与相关字段的值匹配');
            } else {
                callback(); // 验证通过
            }
        }
    }
};

动态表单生成中的复杂验证

在动态生成的表单中,验证逻辑可能需要根据用户的选择或其他动态因素进行调整。

js 复制代码
export default {
    props: {
        dynamicRules: {
            type: Array,
            default: () => []
        }
    },
    methods: {
        formCreateValidate(rule, value, callback) {
            for (const rule of this.dynamicRules) {
                if (!rule.validate(value)) {
                    return callback(rule.message);
                }
            }
            callback(); // 所有规则验证通过
        }
    }
};

使用方式

js 复制代码
const rule = {
  type: 'custom-component',
  field: 'dynamicField',
  title: '动态字段',
  value: '',
  effect: {
    componentValidate: true
  },
  props: {
    dynamicRules: [
      { validate: (val) => val.length >= 5, message: '长度至少为5' },
      { validate: (val) => val.includes('@'), message: '必须包含@符号' }
    ]
  }
}

通过使用 componentValidate 属性和自定义验证方法,你可以轻松地将复杂的验证逻辑封装在自定义组件内,确保表单验证的灵活性和可维护性。这种方式非常适合在需要动态验证或业务逻辑复杂的场景下使用。

相关推荐
IT_陈寒3 小时前
Redis内存暴涨,没想到是AOF重写捣的鬼
前端·人工智能·后端
ikoala3 小时前
让 Codex 自己查账:一个省 token 的小技巧
前端·后端·ai编程
ikoala3 小时前
AI 写页面像说明书,修 Bug 像贴膏药?把这两句话写进 AGENTS.md
前端·javascript·ai编程
Flynt3 小时前
一夜涨近2000星的"开源Grok Bot",我在1核2GB小机上装了一遍:壳是真的,脑子得自备
开源·agent·claude
艺杯羹4 小时前
Windows原生软件锁设计:从暴力杀进程丢数据到零轮询事件驱动架构
windows·系统架构·开源·开源软件·内存管理·开源协议
miofly5 小时前
Nous Research微调Qwen3.8-27B,宣称可剥离中国官方立场内容
开源·github
张张123y5 小时前
DSH 插件调试避坑:client.js 设置面板、热重载与高频报错排查表
开发语言·javascript·人工智能·开源·ecmascript·后端开发·ai agent
去伪存真6 小时前
AI Agent Harness 深度测评与技术选型实战
前端·agent
FRing038 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
用户29914221968011 小时前
GitHub 热榜项目:周榜(2026-11-08)
人工智能·开源·github