Skip to content

Form 表单

AuForm 管理字段模型、规则和整体验证,AuFormItem 负责标签、错误信息和字段级状态。它们不改变内部控件的值,适合组合 Aurora Plus 控件或原生表单元素。

基础用法

基础表单校验

名称和日期为必填项;失焦或选择日期时执行字段校验,点击保存执行整表校验,重置会清除校验状态。

vue
<template>
  <AuForm :model="form" label-width="76" @submit.prevent="validateForm">
    <AuFormItem
      ref="nameItemRef"
      v-slot="{ invalid }"
      label="名称"
      prop="name"
      :rules="nameRules"
    >
      <AuInput v-model="form.name" placeholder="输入日程名称" :invalid="invalid" />
    </AuFormItem>
    <AuFormItem
      ref="dateItemRef"
      v-slot="{ invalid }"
      label="日期"
      prop="date"
      :rules="dateRules"
    >
      <AuDatePicker v-model="form.date" :invalid="invalid" />
    </AuFormItem>
    <AuFormItem>
      <div class="form-demo__actions">
        <AuButton native-type="submit" type="primary">保存并校验</AuButton>
        <AuButton @click="resetForm">重置</AuButton>
      </div>
    </AuFormItem>
    <p v-if="result" class="form-demo__result" role="status" aria-live="polite">
      {{ result }}
    </p>
  </AuForm>
</template>
<script setup>
import { reactive, ref } from 'vue';
import {
  AuButton,
  AuDatePicker,
  AuForm,
  AuFormItem,
  AuInput,
} from 'aurora-plus';
const nameItemRef = ref(null);
const dateItemRef = ref(null);
const result = ref('');
const form = reactive({ name: '', date: '' });
const nameRules = [
  { required: true, message: '请输入名称', trigger: 'blur' },
  { min: 2, max: 24, message: '名称长度应为 2–24 个字符', trigger: 'change' },
];
const dateRules = [
  { required: true, message: '请选择日期', trigger: 'change' },
];
async function validateForm() {
  const [nameValid, dateValid] = await Promise.all([
    nameItemRef.value.validate(),
    dateItemRef.value.validate(),
  ]);
  if (nameValid && dateValid) {
    result.value = '校验通过。';
    return;
  }
  const messages = [];
  if (!nameValid) messages.push(readError(nameItemRef.value, '请输入名称'));
  if (!dateValid) messages.push(readError(dateItemRef.value, '请选择日期'));
  result.value = messages.join(';');
}
function readError(field, fallback) {
  const message = field?.errorMessage;
  return (typeof message === 'string' ? message : message?.value) || fallback;
}
function resetForm() {
  nameItemRef.value.resetField();
  dateItemRef.value.resetField();
  result.value = '';
}
</script>
<style scoped>
.au-form {
  width: min(100%, 480px);
}
.form-demo__actions {
  display: flex;
  gap: 8px;
}
.form-demo__result {
  margin: 0 0 0 76px;
  color: var(--au-color-text-secondary);
  font-size: var(--au-font-size-small);
}
</style>

校验规则

规则支持 requiredwhitespacetypeenumpatternlenminmaxtransformdefaultFieldfieldsmessagetriggertrigger 可为 changeblur 或数组;未设置时所有验证入口都会执行。validator(rule, value, callback, model, options)asyncValidator 可以同步返回、返回 Promise,或调用 callback。

type 支持 stringnumberintegerbooleanarrayobjectdateemailurlregexpmethodhex。字符串与数组的 min / max 表示长度,数字则比较数值。

Form Attributes

属性说明类型默认值
model表单模型object{}
rules按字段路径组织的规则object{}
labelPosition标签位置left / right / topright
labelWidth标签宽度string / number''
size提供给 FormItem 插槽的尺寸small / default / largedefault
inline行内排列booleanfalse
disabled提供给 FormItem 插槽的禁用状态booleanfalse
showMessage是否显示字段错误booleantrue
inlineMessage错误信息是否与控件同行booleanfalse
statusIcon是否显示成功、错误和验证中图标booleanfalse
hideRequiredAsterisk隐藏必填星号booleanfalse
requireAsteriskPosition星号位置left / rightleft
validateOnRuleChange规则变化后重新校验booleantrue
scrollToError整体验证失败时滚动到首个错误booleanfalse
scrollIntoViewOptions自动滚动参数;false 使用浏览器默认值object / false{ block: 'center', behavior: 'smooth' }

sizedisabledinvaliderrorfieldId 通过 FormItem 默认插槽参数提供,避免表单直接修改子组件内部属性。需要同步控件错误外观时可将 invalid 绑定给输入控件。

Form Events 与 Exposes

名称说明
validate(prop, valid, message)字段完成一次校验
submit(event)原生 submit 事件;是否阻止默认行为由使用者决定
validate(callback?)验证全部字段,Promise 返回布尔值
validateField(props, callback?)验证一个或多个字段
resetFields(props?)恢复字段初始值并清除状态
clearValidate(props?)清除字段校验状态
scrollToField(prop, options?)滚动到字段
getField(prop)获取已注册字段上下文
fields已注册字段 Map

字段路径支持 profile.nameitems[0].title

FormItem Attributes

属性说明类型默认值
label标签文字string''
labelFor标签关联的控件 idstring''
labelWidth / labelPosition覆盖表单标签布局string / number''
prop模型字段路径string / path[]''
required添加必填规则并显示必填标识booleanfalse
rules字段附加规则object / arraynull
error外部错误文字string''
validateStatus外部状态error / success / validating''
showMessage是否显示该字段错误booleantrue
inlineMessage / statusIcon覆盖表单的行内错误 / 状态图标设置boolean
validateEvent是否响应模型 change 与控件 blur 自动校验booleantrue
size覆盖表单尺寸small / default / large''

插槽包括 defaultlabelerror。组件暴露 validate(trigger?)resetField()clearValidate()errorMessageelement

Aurora Plus · Vue 3 Component Library