跳转到内容

类型映射 — 定义即表单

本文展示「定义即表单」的核心能力:一个 Valibot 类型定义,会自动渲染为对应的表单控件。下面每个示例的定义都会渲染出一个可交互的表单

所有渲染依赖全局字段配置 FieldGlobalConfigstring/number/boolean/picklist 等隐式类型映射到对应控件),通过 options 传入:

import { PresetDefine } from '@piying-lib/angular-daisyui/preset';

export const FieldGlobalConfig = PresetDefine;

options = { fieldGlobalConfig: FieldGlobalConfig };

大部分 Valibot 类型会被解析为表单控件,以下为常用类型映射。

v.object() 定义的对象会渲染为一个表单组,自动包含所有子字段。表单组内部都可以通过 __helper 引用 formHelper 组件,展示校验错误与提交 / 重置按钮。

object / strictObject → 表单组(自动过滤未定义的键值)

Section titled “object / strictObject → 表单组(自动过滤未定义的键值)”

v.looseObject() 会保留未在 Schema 中显式定义的键值:

objectWithRest → 部分固定 + 部分可添加

Section titled “objectWithRest → 部分固定 + 部分可添加”

v.objectWithRest() 部分键值固定,其余键值按指定类型可动态添加:

v.record() 无固定键值,键值全部可动态添加(目前仅支持 key 为 string 类型):

以下类型会被解析为表单数组。

v.array() 定义会渲染为可动态增删的数组:

tuple / strictTuple → 固定长度数组

Section titled “tuple / strictTuple → 固定长度数组”

v.tuple() 固定数组项,不可添加,超过长度自动过滤:

looseTuple → 固定长度且保留多余项

Section titled “looseTuple → 固定长度且保留多余项”

v.looseTuple() 固定数组项,不可添加,超过长度时保留:

tupleWithRest → 部分固定 + 部分可添加

Section titled “tupleWithRest → 部分固定 + 部分可添加”

v.tupleWithRest() 部分数组项固定,其余按指定类型可动态添加:

v.optional() 的第二个参数即为默认值,渲染后直接填入表单:

使用 v.object() 可进行多级数据结构定义,自动嵌套渲染为子表单组:

更多类型请参考 Valibot API。自定义类型可使用 custom

表单能力(值监听 / 布局移动 / 分区禁用 / 字段分组 / 验证 / 级联 / 过滤组 / 滚动组)见 表单使用