跳转到内容

表单字段 field

数据录入组件。三层同源:无头内核给出解剖与状态机,Vue 组件与自定义元素只是它的两层外壳,行为完全一致。

示例

基础用法

控件由自己写,Field 只把属性并上去:标题的 for、控件的 id 与描述链(aria-describedby)自动对齐

用于接收账单与安全提醒

无效与必填

invalid 一翻,错误文案接入描述链并显出,控件上同时落 aria-invalid;required 只落 aria-required,校验仍归宿主

用于接收账单与安全提醒

禁用

Field 的 disabled 只把 data-disabled 铺到各部件上;真正改不动还得在自己的控件上落原生 disabled

账号创建后不可更改

标签左置

各部件都是独立节点,把根节点改成两列网格就能把标题挪到控件左边,说明与错误文案跟着对齐到控件那一列

留空表示使用默认端口

字段横排

一行里摆多个字段:每个字段自成一块,谁跟谁排一行是外层容器的事

提示、警告与错误

三档语气各归各的部件:提示与警告都写在描述里,控件的 aria-invalid 保持 false;只有真出错才翻 invalid、错误文案才接进描述链

创建之后还能改

这个规格跑构建会偏紧,仍然可以保存

可用范围 1 到 65535

产物

自定义元素<xh-field>
Vue 组件XhFieldControl XhFieldDescription XhFieldErrorText XhFieldLabel XhFieldRoot
组合式函数useField
状态机无,connect 直接由 props 算属性
皮肤@xihan-ui/styles/field.css

解剖

部件名即 data-part 属性值,也是皮肤的选择器。加粗的是必备部件,不渲染它组件不工作(Web Components 适配器会在诊断通道上报 wc.missing-part)。

data-scope="field"root · label · control · description · error-text

Props

属性类型必填说明
controlIdstring控件 id;作者接管时以它为准。
disabledboolean
invalidboolean校验失败态:控件上 aria-invalid=true,错误文案接入描述链并显出。
requiredboolean必填:控件上 aria-required=true。

connect API

useField 产出的对象。getXxxProps() 铺到对应部件的宿主元素上,其余是可读状态与操作入口。

成员类型说明
invalidboolean
requiredboolean
disabledboolean
controlIdstring控件实际使用的 id,label 的 for 与它一致。
getRootProps() => T['element']
getLabelProps() => T['label']
getControlProps() => T['element']控件本身由作者渲染,这里只产出要合并上去的属性。
getDescriptionProps() => T['element']
getErrorTextProps() => T['element']

键盘

规格出处:W3C APG

无键盘交互(不接收焦点,或焦点行为完全由原生元素提供)。

Released under The MIT License