n-code-input 验证码输入
验证码 / 一次密码的分格录入组件:一排格子承接逐字符输入(自动前进、退格回退、粘贴整段填充),输满自动收起键盘并派发 finish。点击格子唤起系统键盘(type 决定数字或文本键盘);关掉系统键盘(disabled-keyboard)后可与自定义键盘(n-keyboard-number 等)搭配,值经 v-model 双向流动。show-resend 开启后格子下方内置「重新发送」倒计时重发行,承接验证码发送闭环。
- 值通道与 n-input 同构(受控双通道):
update:model-value供 v-model,change同参同发;键入、退格、粘贴、外部赋值、clear()都走同一条清洗管线(过滤小数点与空白、截断到 maxlength),显示与事件永远一致- 值一律为 string(
type="number"取值仍是字符串),数字场景由使用侧自行转换- 重发行为状态机:可发送 →(点击,派发
send)→ 正在发送 →(接口成功后ref.start())→ 倒计时(每秒countdown、结束end)→ 可发送;接口失败调ref.reset()复位- 光标闪烁与倒计时均由 JS 定时器驱动(无 CSS 动画),组件卸载即停表
平台兼容性
| App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | QQ小程序 |
|---|---|---|---|---|---|---|
| √ | √ | √ | × | × | × | × |
API
属性
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|---|---|---|---|---|
| model-value | 输入值(受控绑定:键入/退格/粘贴自动清洗后回传,超 maxlength 截断) | String | "" | - |
| maxlength | 验证码位数 = 格子数(同时是原生输入框的 maxlength),小于 1 按 1 处理;短信验证码常用 4 / 6 | Number | 4 | - |
| type | 键盘类型:number = 数字键盘(验证码主场景)/ text = 文本键盘(字母混合码);取值仍为 string | String | number | number<br/>text |
| password | 内容打码:已输入格显示圆点而非字符(支付密码场景);与 n-input 的 password 同义 | Boolean | false | - |
| border | 边框形态(与 n-input 同名同义):surround 全边框 / bottom 下划线 / none 无边框 | String | surround | surround<br/>bottom<br/>none |
| hairline | 细边框(0.5px 发丝线,高 DPR 屏更轻盈;bottom 形态作用在下划线上) | Boolean | false | - |
| bold | 格内字符加粗 | Boolean | false | - |
| size | 格子边长(px,正方形);格内字号按边长 0.55 比例联动(不超 0.7 安全线,各端字体不贴边) | Number | 44 | - |
| focus | 自动获取焦点(原生键盘模式触发系统聚焦;disabledKeyboard 模式下作为光标显隐的受控开关——自定义键盘打开时置 true、关闭时置回 false) | Boolean | false | - |
| disabled | 禁用(保色相整体降透明;透明拦截层盖住格子与重发行,点击与键入全部拦截) | Boolean | false | - |
| disabled-keyboard | 点击不唤起系统键盘(隐藏输入框不渲染):与自定义键盘(如 n-keyboard-number)搭配,值经 v-model 由外部驱动 | Boolean | false | - |
| disabled-dot | 值中过滤小数点(数字键盘在部分端仍可键入 ".",验证码场景默认剔除) | Boolean | true | - |
| adjust-position | 键盘弹起时是否自动上推页面(原生避让机制;建议本页配置 softinputMode: adjustResize,见 n-input readme) | Boolean | true | - |
| cursor-spacing | 光标与键盘保持的距离(px):键盘弹起时原生上推量按此值计算(与 n-input 同默认 20) | Number | 20 | - |
| confirm-type | 键盘确认键(右下角按钮)文字 | String | done | send<br/>search<br/>next<br/>go<br/>done |
| confirm-hold | 点击键盘确认键后不收起键盘 | Boolean | false | - |
| show-resend | 格子下方显示重发行(重新发送 / 倒计时;点击派发 send,倒计时由 ref.start() 启动) | Boolean | false | - |
| seconds | 重发倒计时秒数(start() 时生效,小于 1 按 1 处理) | Number | 60 | - |
| custom-class | 挂到根节点的额外 class(类需定义在组件样式表内) | String | "" | - |
| custom-style | 根节点行内样式,如 "margin-top:20px" | String | "" | 与 css 相同 |
事件
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| update:model-value | 值变化(v-model 通道):键入 / 退格 / 粘贴 / 外部赋值清洗后的值 | 新值字符串 |
| change | 值变化时触发(与 update:model-value 同参同发) | 清洗后的当前值 |
| finish | 输入满 maxlength 位时触发(从不满到满的跳变才发;同时收起系统键盘) | 完整值字符串 |
| focus | 聚焦时触发(原生键盘模式为原生聚焦事件对象;disabled-keyboard 模式为点击格子区事件对象) | 事件对象 |
| blur | 失焦时触发(仅原生键盘模式有原生失焦源) | 事件对象 |
| confirm | 点击键盘确认键时触发(仅原生键盘模式) | 事件对象 |
| send | 点击重发行(可发送态)时触发,随后进入「正在发送」;接口成功调 ref.start()、失败调 ref.reset() | - |
| countdown | 重发倒计时每秒触发 | 剩余秒数 |
| end | 重发倒计时结束、回到可发送状态时触发 | - |
方法(经 ref 调用)
| 方法名 | 说明 | 参数 |
|---|---|---|
| clear | 清空值(验证码校验失败重输场景);input/change/update 通道照常发出,焦点不受影响 | - |
| start | 开始重发倒计时(send 接口成功后调用);每秒派发 countdown、结束派发 end | - |
| reset | 重置重发行为可发送态(send 接口失败时调用;倒计时进行中也可强制复位) | - |