Skip to content
On this page

FormGroup

使用 FormGroup 组件添加表单项

示例

基本用法

vue
<template>
<Form @submit="onSubmit">
  <FormGroup required>
    <Label>用户名</Label>
    <TextInput name="username"/>
  </FormGroup>
  <button type="submit">提交</button>
</Form>
</template>

<script setup>
import { Form, FormGroup, Label, TextInput, Violation } from '@tomoeed/j-form';

function onSubmit(value) {
    console.log('Do something.');
}
</script>

自定义验证反馈信息

可以使用 valid-feedback, invalid-feedbackexpect-feedback 插槽渲染验证返回信息

vue
<template>
<Form>
  <FormGroup required>
    <template #valid-feedback>用户名可以使用</template>
    <template #invalid-feedback="{ contain, containAny }">
      <span v-if="contain(Violation.VALUE_MISSING)">用户名不能为空</span>
      <span v-else-if="containAny(Violation.TOO_LONG, Violation.TOO_SHORT)">用户名长度应在 2-10 个字符之间</span>
      <span v-else-if="contain(Violation.REVALIDATE_INVALID)">用户名已注册</span>
      <span v-else>Unknown</span>
    </template>
    <template #expect-feedback>发生未知错误, 请重新尝试</template>
      
    <Label>用户名</Label>
    <TextInput name="username" placeholder="Please enter username" minlength="2" maxlength="10" :revalidate="revalidate"/>
  </FormGroup>
</Form>
</template>

<script setup>
import { From, FormGroup, Label, TextInput, Violation } from '@tomoeed/j-form';

function revalidate(value) {
    switch (value) {
        case 'existed':
            return Promise.resolve(false);
        default:
            return Promise.resolve(true);
    }
}
</script>

Props

属性名类型默认值描述
novalidatebooleanfalse是否禁止组件验证输入文本
requiredbooleanfalse用户在表单提交之前是否需要指定一个非空值
该属性对于不同的表单控件具有不同的意义, 如 TextInput 需要输入具有有效字符的文本, 而 Radio 则需要必须选中其中的一项

Slots

插槽名Props描述
default使用的表单控件
valid-feedback表单控件验证通过
invalid-feedback{ contain: (violation: Violation) => boolean; containAny: (...violations: Violation[]) => boolean; }表单控件验证未通过
expect-feedback表单控件验证发生异常