Skip to content

FxInput 输入框

通过鼠标或键盘输入字符。不依赖任何 UI 框架,支持 input / textarea 双模式、clearable、showPassword、showWordLimit、formatter/parser、autosize。

基础用法

禁用

通过 disabled 属性禁用。

可清空

通过 clearable 属性使输入可清空。

自定义清空图标

通过 clear-icon 属性自定义清空图标(字符串为 FxIcon 图标名)。

格式化

formatter 展示格式化值,通常同时使用 parser

密码框

通过 show-password 属性得到可切换显示的密码框。

带图标

prefix-iconsuffix-icon 属性添加图标,也可用 prefix / suffix 具名插槽。

文本域

用于输入多行文本,可缩放。加 type="textarea" 切换为原生 textarea。

通过 rows 控制高度。

自适应文本域

给 textarea 设置 autosize,高度随内容自适应;可传对象 { minRows, maxRows }

复合输入

前置或后置元素,一般是标签或按钮。

prepend / append 插槽分发前置 / 后置元素。

尺寸

除默认尺寸外,另有 largesmall 可选。

限制长度

maxlength / minlength 限制输入长度;show-word-limit 显示字数统计;word-limit-position="outside" 让计数显示在输入框外。

字素计数(count-graphemes)

ts
// 用 Intl.Segmenter 正确统计 emoji / 组合字符的字素数
const countGraphemes = (value: string) =>
  Array.from(new Intl.Segmenter().segment(value)).length

设置 count-graphemes 后按字素计算长度,原生 maxlength / minlength 约束不再生效。

浏览器支持

组件用 Intl.Segmenter(Chrome 87+、Firefox 125+、Safari 14.1+)做正确的字素聚类;旧浏览器回退到 Array.from() 按码点迭代。

API

Attributes

属性说明类型默认值
type类型'text' | 'textarea' | 'number' | 'password' | 'email' | 'search' | 'tel' | 'url'text
model-value (v-model)绑定值string / number
model-modifiersv-model 修饰符{ lazy?: true, number?: true, trim?: true }
maxlength原生 maxlengthstring / number
minlength原生 minlengthstring / number
show-word-limit是否显示字数统计(type 为 text / textarea)booleanfalse
word-limit-position字数统计位置'inside' | 'outside'inside
placeholder占位文本string
clearable是否显示清空按钮booleanfalse
clear-icon自定义清空图标。字符串为 IconString 类型(即 FxIcon 图标名,如 ep:editant-design:homesvg:xxx),亦可传组件string / ComponentCircleClose
formatter格式化展示值(type 为 text)(value: string | number) => string
parser反解析(value: string) => string
show-password是否切换显示密码booleanfalse
disabled是否禁用booleanfalse
size尺寸'large' | 'default' | 'small'
prefix-icon前置图标。字符串为 IconString 类型(即 FxIcon 图标名,如 ep:editant-design:homesvg:xxx),亦可传组件string / Component
suffix-icon后置图标。字符串为 IconString 类型(即 FxIcon 图标名,如 ep:editant-design:homesvg:xxx),亦可传组件string / Component
rowstextarea 行数number2
autosizetextarea 自适应高度boolean / { minRows?: number, maxRows?: number }false
autocomplete原生 autocompletestringoff
name原生 namestring
readonly原生 readonlybooleanfalse
resize缩放方向'none' | 'both' | 'horizontal' | 'vertical'
autofocus原生 autofocusbooleanfalse
form原生 formstring
aria-label原生 aria-labelstring
tabindextabindexstring / number
input-styleinput / textarea 元素样式string / CSSProperties{}
inputmode原生 inputmodestring
min原生 min(number type)number / string
max原生 max(number type)number / string
step原生 step(number type)number / string
count-graphemes字素计数函数;设置后原生 maxlength/minlength 失效(value: string) => number

Events

事件名说明类型
blur失焦时触发(event: FocusEvent) => void
focus聚焦时触发(event: FocusEvent) => void
change失焦或回车且值变化时触发(value: string | number, evt?: Event) => void
input值变化时触发(value: string | number) => void
clear点击清空按钮时触发(evt?: MouseEvent) => void
keydown按键时触发(event: KeyboardEvent | Event) => void
mouseleave鼠标离开时触发(event: MouseEvent) => void
mouseenter鼠标进入时触发(event: MouseEvent) => void
compositionstart输入法组合开始(event: CompositionEvent) => void
compositionupdate输入法组合更新(event: CompositionEvent) => void
compositionend输入法组合结束(event: CompositionEvent) => void

Slots

插槽名说明
prefix前置内容(type 非 textarea)
suffix后置内容(type 非 textarea)
prepend前置区块(type 非 textarea)
append后置区块(type 非 textarea)
password-icon自定义密码图标(show-password 为 true 时)

Exposes

名称说明类型
blur失焦() => void
clear清空值() => void
focus聚焦() => void
inputHTML input 元素Ref<HTMLInputElement>
refinput 或 textarea 元素Ref<HTMLInputElement | HTMLTextAreaElement>
resizeTextarea重算 textarea 高度() => void
select选中文本() => void
textareaHTML textarea 元素Ref<HTMLTextAreaElement>
textareaStyletextarea 样式Ref<StyleValue>
isComposing是否输入法组合中Ref<boolean>
passwordVisible密码是否可见Ref<boolean>

FAQ

为什么 clearable 会让 FxInput 变宽?

FxInput 默认无固定宽度,显示清空图标时组件会变宽,设置宽度即可:

vue
<FxInput v-model="input" clearable style="width: 200px" />