Skip to content

Form 表单

表单容器组件,配合 FormItemuseForm 使用,快速搭建带校验的表单布局。

何时使用:需要构建带校验、label 布局和错误提示的表单时使用。简单场景可直接用原生 <form>

基础用法

Form 接收 useForm 解构出的 errors(必填星号、错误提示、label 布局全部自动处理):

布局方向

通过 layout 属性切换布局:horizontal(默认,label 在左)、vertical(label 在上)、inline(行内)。

必填星号

FormItem 设置 required 属性后,label 前显示红色星号(纯视觉提示,不做自动校验):

与 useForm 集成

Form 组件不内置校验逻辑,全部委托给 useForm

  • :errors — 传入 useForm 解构出的 errorsFormItem 自动显示对应字段错误
  • :validating-fields — 传入 useForm 解构出的 validatingFields,异步校验时对应 FormItem 显示「校验中…」
  • validate / validateField / reset — 在按钮/输入事件中调用 useForm 方法驱动校验
vue
<script setup>
import { Form, FormItem, Input, useForm } from 'moongate-vue'

const { values, errors, validatingFields, validateField } = useForm({
  initialValues: { username: '' },
  rules: {
    username: async (v) => {
      // 异步校验(远程唯一性)
      await new Promise((r) => setTimeout(r, 300))
      return v === 'admin' ? '该用户名已被占用' : true
    },
  },
})
</script>

<template>
  <Form :errors="errors" :validating-fields="validatingFields" style="max-width: 320px;">
    <FormItem name="username" label="用户名" required>
      <Input
        v-model="values.username"
        placeholder="输入用户名检测是否可用"
        @blur="validateField('username')"
      />
    </FormItem>
  </Form>
</template>

自定义错误文案

FormItemerror prop 可覆盖注入的错误文案(优先级高于 errors[name]):

vue
<Form :errors="errors">
  <FormItem name="username" label="用户名" :error="customError">
    <Input v-model="values.username" />
  </FormItem>
</Form>

API

Form Props

属性类型默认值说明
errorsPartial<Record<keyof T, string>>undefineduseForm 解构出的字段错误映射
layout'horizontal' | 'vertical' | 'inline''horizontal'布局方向
labelWidthstring'80px'label 宽度(仅 horizontal 生效)
validatingFieldsRecord<string, boolean>undefineduseForm 解构出的单字段校验中状态

FormItem Props

属性类型默认值说明
namestring必填字段名(对应 errors[key]validatingFields[key]
labelstringundefined标签文本
requiredbooleanfalse是否显示必填星号(纯视觉提示)
forstringundefined关联输入框的 id,点击 label 聚焦对应 input
errorstringundefined自定义错误文案(覆盖注入的 errors[name]
validatingTextstringundefined校验中文案(默认跟随全局配置)

Slots

名称说明
default表单控件内容(FormItem 内放置 Input/Select 等)

💡 设计说明:Form/FormItem 是视图层组件,不含校验逻辑——状态管理、异步校验、关联校验、编排全部由 useForm 提供。两者组合使用即可获得完整的表单校验能力。

Released under the MIT License