# Form 表单

LhForm + LhFormItem 组合:模型校验(required/自定义规则)、错误展示(role="alert")、子控件 aria-invalid 联动、整体 validate/resetFields。

表单校验
<template>
  <div style="max-width: 640px">
    <LhForm ref="form" :model="form" :rules="rules" label-width="80px">
      <LhFormItem prop="name" label="姓名" required>
        <LhInput v-model="form.name" placeholder="请输入姓名" />
      </LhFormItem>
      <LhFormItem prop="genre" label="题材">
        <LhSelect v-model="form.genre" :options="genres" placeholder="请选择" />
      </LhFormItem>
      <LhFormItem>
        <LhButton type="primary" @click="submit">提交</LhButton>
        <LhButton @click="reset">重置</LhButton>
      </LhFormItem>
    </LhForm>
    <p class="demo-note">提交结果:{{ result }}</p>
    <p class="demo-note" style="margin-top: 16px">label-position="top":</p>
    <LhForm :model="form2" label-position="top">
      <LhFormItem prop="name" label="姓名">
        <LhInput v-model="form2.name" placeholder="标签在上方" />
      </LhFormItem>
    </LhForm>
    <p class="demo-note" style="margin-top: 16px">inline 行内表单:</p>
    <LhForm :model="form3" inline>
      <LhFormItem prop="name" label="姓名">
        <LhInput v-model="form3.name" placeholder="行内" />
      </LhFormItem>
      <LhFormItem prop="genre" label="题材">
        <LhSelect v-model="form3.genre" :options="genres" placeholder="行内" />
      </LhFormItem>
    </LhForm>
  </div>
</template>

<script>
export default {
  data: () => ({
    form: { name: '', genre: '' },
    form2: { name: '' },
    form3: { name: '', genre: '' },
    rules: { name: [{ required: true, message: '' }] },
    genres: [
      { value: 'shan', label: '山水' },
      { value: 'hua', label: '花鸟' },
    ],
    result: '(未提交)',
  }),
  methods: {
    submit() {
      const form = this.$refs.form
      form.validate().then((ok) => {
        this.result = ok ? '校验通过 ✓' : '校验失败:姓名必填'
      })
    },
    reset() {
      this.$refs.form.resetFields()
      this.result = '(已重置)'
    },
  },
}
</script>

# Form Props

属性 说明 类型 默认值
model 数据模型(必传) Record<string, unknown> —
rules 校验规则(键为 prop 路径) Record<string, LhFormRule[]> —
labelPosition 标签位置 'left' \| 'right' \| 'top' 'right'
labelWidth 标签宽度 string \| number —
inline 行内布局 boolean false

# FormItem Props

属性 说明 类型 默认值
prop 对应 model 字段路径(支持 a.b 深层) string —
label / required / rules 标签、必填星号、局部规则(与 form 规则合并) — —

# 方法

方法 说明
validate() 校验全部字段(注册项 + rules 覆盖项),返回 Promise<boolean>
validateField(prop) 校验单个字段
resetFields() / resetField(prop) 恢复初始值(挂载时按 rules 键快照)

提示

表单控件的校验失败联动是自动的:控件注入 LhFormItem 上下文,errorMessage 非空即渲染 aria-invalid,无需手动绑定。

最后更新: 2026/10/12 23:57:05

Copyright © 2024-2026 风默文学 | 宁ICP备2024006574号 | 公安备案徽标苏公网安备32040002010537