跳转到内容

文本输入 text-field

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

示例

基础用法

root 持有状态,label 与 input 各自向它取属性;不传 value 即为非受控,组件自己维护值

受控

传了 value 就由宿主说了算,组件自己不再改状态;v-model:value 是它的语法糖

当前:曦寒

可清空与字数上限

clearable 让清空按钮可用并把 Escape 接管过来,maxLength 同时落成原生 maxlength 与机器侧截断

2 / 10

禁用与校验态

disabled 与 readOnly 都改不动值,invalid 只把 aria-invalid 标出来、不拦输入

形态

variant 决定底与描边怎么画:描边、淡色填底、无框;输入框没有实心档

语气

tone 决定用哪族颜色,与 variant 正交;这里固定 subtle 形态,语气的底色差别不必聚焦就看得见

尺寸

size 只改高度、内边距与字号,标签与清空按钮一起跟着换档;不写就是缺省档

程序化改值

setValue 直接写值,只受禁用、只读与字数上限约束;clear 走清空意图,canClear 不成立时按兵不动

(空)

原生属性

写在 input 部件上的属性直接落到真正的输入框,自动填充与移动端键盘类型由它们决定

事件

值的变化走 root 的 value-change,聚焦失焦这类原生事件直接写在 input 部件上

还没有事件

框内前后缀

前后缀压在输入框上,输入框自己让出内边距,两者共用同一份边框与底色

¥
cm

密码与明暗切换

写在 input 部件上的 type 盖过默认的 text,明暗由宿主的一个布尔翻转

限制可输入的字符

beforeinput 直接写在 input 部件上,非法字符进不了框,值与框里的内容始终一致

聚焦与选区

input 部件渲染出来就是一个 input,拿到它的节点就能聚焦、全选、把光标挪到末尾

输入组

圆角槽换成只留外侧的一组值,中缝用负外边距叠掉一条描边,相邻控件拼成一体

https://.com

多行与自动长高

组合式函数把同一份状态交给作者自写的多行部件,高度在每次输入后按内容重新量

0 / 120

产物

自定义元素<xh-text-field>
Vue 组件XhTextFieldClearTrigger XhTextFieldInput XhTextFieldLabel XhTextFieldRoot
组合式函数useTextField
状态机textFieldMachine
皮肤@xihan-ui/styles/text-field.css

解剖

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

data-scope="text-field"root · label · input · clear-trigger

Props

属性类型必填说明
valuestring受控值;给了就由宿主说了算,机器不自改。
defaultValuestring非受控初值。
placeholderstring
disabledboolean
readOnlyboolean
requiredboolean
invalidboolean
namestring表单字段名;给了才参与提交。
maxLengthnumber字符数上限。同时落成原生 maxlength 与机器侧的截断,两道都要。
clearableboolean开启清空能力:清空按钮可用、Escape 接管。关掉时按钮带 hidden 收起。
variantControlVariant形态:outline / subtle / ghost,决定输入框的底与描边怎么画。
toneTone语气:brand / neutral / success / warning / danger / info,决定聚焦强调用哪族颜色。
sizeSize尺寸:sm / md / lg,决定输入框与清空按钮的几何档位。
onValueChange(details: TextFieldValueChangeDetails) => void

状态机

状态idle

事件VALUE.SET · VALUE.CLEAR · FORM.RESET

判据canEdit · canClear

connect API

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

成员类型说明
valuestring
emptyboolean值为空串。作者据此显示占位说明一类的东西。
disabledboolean
readOnlyboolean
invalidboolean
clearableboolean
atLimitboolean已顶到 maxLength:再敲也进不去,作者据此把字数提示标红。
canClearboolean清空按钮此刻是否可用(开了 clearable、可编辑、且有值)。
setValue(next: string) => void直接写值,只受 disabled/readOnly 与 maxLength 约束,与 clearable 无关。
clear() => void走清空意图,受 canClear 约束;无条件清空请用 setValue('')。
getRootProps() => T['element']
getLabelProps() => T['label']
getInputProps() => T['input']
getClearTriggerProps() => T['button']

键盘

规格出处:W3C APG

按键生效条件行为
Escapefocus in input, clearable 且值非空, not disabled/readOnly清空值;三个条件缺一即不接管该键,交回给外层与浏览器

Released under The MIT License