Skip to content

Input 输入框

基础文本输入。聚焦时主色描边加光晕,支持一键清空与前后缀插槽。

基础用法

vue
<SrInput placeholder="请输入内容…" />

双向绑定与清空

clearable 会显示一个清空按钮——禁用、只读、值为空时都不显示, 避免出现「点了没反应」的按钮。

vue
<script setup>
import { ref } from 'vue'
const value = ref('')
</script>

<template>
  <SrInput v-model="value" clearable placeholder="输入后会出现清空按钮" />
</template>

清空后会重新聚焦,方便继续输入。

尺寸

三档离散尺寸,不使用任意值。

vue
<SrInput size="sm" placeholder="小" />
<SrInput size="md" placeholder="中" />
<SrInput size="lg" placeholder="大" />

状态

disabled 完全不可交互;readonly 可选中复制但不能修改; invalid 用于校验失败,共三个状态色统一用危险色令牌。

vue
<SrInput disabled placeholder="禁用" />
<SrInput readonly model-value="只读内容" />
<SrInput invalid placeholder="错误态" />

前后缀插槽

prefix / suffix 放图标或单位。图标建议用 size="sm",与文字比例更协调。

vue
<SrInput placeholder="搜索…">
  <template #prefix>
    <SrIcon size="sm"><svg … /></SrIcon>
  </template>
</SrInput>

<SrInput placeholder="数量">
  <template #suffix><span>个</span></template>
</SrInput>

原生 type

type 直接透传给原生 <input>

需要数字输入时请用 SrInputNumber

type="number" 看起来够用,但它的行为在输入过程中很别扭:浏览器会把 -1. 这类「还没输完」的内容判为无效值,读数拿到的是空串—— 用户敲减号的过程就丢了。要数字请用 SrInputNumber

vue
<SrInput type="password" />
<SrInput type="email" placeholder="邮箱" />

事件与方法

事件参数触发时机
update:modelValuestring | number输入时
changestring原生 change 时机(失焦或回车后)
focus / blurFocusEvent获得 / 失去焦点
enterKeyboardEvent按下回车
clear点击清空按钮

通过 ref 可调用 focus() / blur() 手动控制焦点。

vue
<script setup>
import { ref } from 'vue'

const inputRef = ref()

// 手动聚焦
inputRef.value?.focus()
</script>

<template>
  <SrInput ref="inputRef" />
</template>

Props

名称类型默认值说明
idstring唯一标识,同时用于关联 label
typestring'text'原生 type
size'sm' | 'md' | 'lg''md'尺寸
placeholderstring''占位文本
disabledbooleanfalse是否禁用
readonlybooleanfalse是否只读
clearablebooleanfalse是否可一键清空
invalidbooleanfalse是否处于错误态

插槽

名称说明
prefix输入框左侧内容(图标、单位等)
suffix输入框右侧内容

无障碍

  • 焦点指示由容器的 :focus-within 统一提供(描边加光晕), 因此不再给内部 <input> 额外加 outline——容器整体响应才对得上 「这是一个输入控件」的视觉单元
  • 配合 SrFormItem 使用时,id 会自动关联到 <label>,点标签即可聚焦

自用组件库 · 源码分发 · 不发布 npm