# 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,无需手动绑定。
Copyright © 2024-2026 风默文学 | 宁ICP备2024006574号 |
苏公网安备32040002010537