UI组件前端【免费下载链接】shadcn-vueVue port of shadcn-ui项目地址https://gitcode.com/gh_mirrors/sh/shadcn-vue点击查看免费下载本文围绕 shadcn-vue 官方文档 Input OTP 组件文档 展开系统讲解基于vue-input-otp封装的一次性密码输入组件的完整用法。你将掌握 CLI/手动两种安装方式、四个子组件的组合规则、pattern自定义输入模式、v-model受控用法以及如何与 VeeValidate 集成实现带校验的验证码表单并深入理解其底层实现原理与可访问性设计。组件概览四个子组件如何协作Input OTP 不是单个组件而是一个由四个子组件组合而成的组件族它们各司其职组件职责关键 PropsInputOTP根组件承载整体输入逻辑值管理、焦点、粘贴处理maxlength、pattern、v-model、classInputOTPGroup将多个输入槽位分组控制组内水平排列classInputOTPSlot单个字符槽位负责渲染字符、激活态与假光标index、classInputOTPSeparator在分组之间插入分隔符默认渲染减号图标class从源码结构看根组件 InputOTP.vue 直接转发vue-input-otp的OTPInputProps与OTPInputEmits并通过 reka-ui 的useForwardPropsEmits做属性/事件转发同时将class单独剥离后拼接到容器类上const props definePropsOTPInputProps { class?: HTMLAttributes[class] }() const emits defineEmitsOTPInputEmits() const delegatedProps reactiveOmit(props, class) const forwarded useForwardPropsEmits(delegatedProps, emits)而 InputOTPSlot.vue 通过useVueOTPContext()获取 OTP 上下文依据传入的index读取对应槽位的状态slot?.char、slot?.isActive、slot?.hasFakeCaret并据此渲染字符、激活态边框和闪烁的光标动画animate-caret-blink。安装CLI 与手动两种方式方式一CLI 一键安装推荐在项目根目录执行npx shadcn-vuelatest add input-otp该命令会自动将组件源码写入项目的components/ui/input-otp目录并同步安装所需依赖。关于 CLI 的更多用法如 registry 指定、覆盖策略等可参考仓库中的 CLI 文档。方式二手动安装安装底层依赖本组件基于vue-input-otp封装需要先安装它npm install vue-input-otp同时确保项目中已具备 reka-ui用于useForwardProps/useForwardPropsEmits、vueuse/core用于reactiveOmit以及lucide/vue用于分隔符图标等运行时依赖。复制源码从仓库中复制 Input OTP 组件族的四个源文件到你的项目中对应源码位于InputOTP.vueInputOTPGroup.vueInputOTPSlot.vueInputOTPSeparator.vue修正导入路径将源码中的/lib/utilscn工具函数、/registry/new-york-v4/ui/input-otp等导入路径改为与你项目结构一致的相对路径。基本用法六位验证码最典型的使用方式是分组渲染槽位InputOTP通过maxlength决定总位数InputOTPGroup负责将槽位分组组间可插入分隔符script setup langts import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, } from /components/ui/input-otp /script template InputOTP v-modelvalue :maxlength6 InputOTPGroup InputOTPSlot :index0 / InputOTPSlot :index1 / InputOTPSlot :index2 / /InputOTPGroup InputOTPSeparator / InputOTPGroup InputOTPSlot :index3 / InputOTPSlot :index4 / InputOTPSlot :index5 / /InputOTPGroup /InputOTP /template要点说明maxlength与槽位数需一致maxlength6表示验证码长度为 6因此渲染了 6 个InputOTPSlotindex从 0 到 5。index必须唯一且连续每个槽位通过index关联到底层 OTP 上下文中的对应位置重复或跳号会导致输入错位。v-model双向绑定绑定值即用户最终输入的验证码字符串提交表单时直接读取即可。完整的可运行示例可参考 InputOTPDemo.vue。高级用法一自定义输入模式pattern默认情况下槽位接受任意字符。当业务要求限制字符类型如只允许数字、或数字字母时可通过pattern属性传入正则。vue-input-otp内置了常用正则常量例如REGEXP_ONLY_DIGITS_AND_CHARS仅数字和字母script setup langts import { REGEXP_ONLY_DIGITS_AND_CHARS } from vue-input-otp // ... /script template InputOTP maxlength6 :patternREGEXP_ONLY_DIGITS_AND_CHARS InputOTPGroup InputOTPSlot :index0 / !-- ... -- /InputOTPGroup /InputOTP /template从底层实现看pattern会透传到vue-input-otp的OTPInput组件由它在输入阶段对每个字符做正则校验不符合规则的按键会被拦截从而在源头保证输入合法性。你也可以传入自定义正则如/^[0-9]$/实现更严格的纯数字限制。对应演示见 InputOTPPatternDemo.vue。高级用法二分组与分隔符Separator当验证码位数较多时通常按3-3或4-4分组以提升可读性。使用InputOTPSeparator /在组间插入分隔元素template InputOTP maxlength4 InputOTPGroup InputOTPSlot :index0 / InputOTPSlot :index1 / /InputOTPGroup InputOTPSeparator / InputOTPGroup InputOTPSlot :index2 / InputOTPSlot :index3 / /InputOTPGroup /InputOTP /template从源码看InputOTPSeparator.vue 渲染一个带roleseparator的容器默认通过MinusIcon来自lucide/vue展示减号分隔符你也可以通过默认插槽传入自定义分隔内容如/或-文本。完整演示见 InputOTPSeparatorDemo.vue。高级用法三受控组件v-modelInputOTP支持标准的v-model指令你可以完全掌控输入值例如在值变化时触发校验、联动「重发验证码」倒计时或实现「输入满 6 位自动提交」等交互script setup langts import { ref, watch } from vue const value ref() watch(value, (v) { if (v.length 6) { // 自动提交验证码 } }) /script对应演示见 InputOTPControlledDemo.vue。高级用法四接入表单校验VeeValidateInput OTP 可以无缝嵌入表单校验体系。官方文档以 VeeValidate 为例通过VeeField包裹输入将componentField透传给InputOTP配合 Zod schema 实现「最少 6 位」等校验规则错误信息通过FieldError展示script setup langts import { toTypedSchema } from vee-validate/zod import { useForm, Field as VeeField } from vee-validate import { z } from zod const formSchema toTypedSchema( z.object({ pin: z.string().min(6, { message: Your one-time password must be 6 characters., }), }), ) const { handleSubmit, submitCount } useForm({ validationSchema: formSchema, initialValues: { pin: }, }) const onSubmit handleSubmit((data) { // 提交 data.pin }) /script template form classspace-y-6 w-sm submitonSubmit VeeField v-slot{ componentField, errors } namepin :validate-on-blurfalse :validate-on-inputsubmitCount 0 :validate-on-model-updatesubmitCount 0 Field :data-invalid!!errors.length FieldLabel forform-otp-demo-pin One-Time Password /FieldLabel InputOTP idform-otp-demo-pin v-bindcomponentField :maxlength6 :aria-invalid!!errors.length InputOTPGroup InputOTPSlot :index0 / InputOTPSlot :index1 / InputOTPSlot :index2 / InputOTPSlot :index3 / InputOTPSlot :index4 / InputOTPSlot :index5 / /InputOTPGroup /InputOTP FieldDescription Please enter the one-time password sent to your phone. /FieldDescription FieldError v-iferrors.length :errorserrors / /Field /VeeField Button typesubmit formform-otp-demo Submit /Button /form /template实现细节值得注意校验时机validate-on-blurfalse关闭失焦校验配合validate-on-input与validate-on-model-update在submitCount 0即首次提交后才开启实时校验避免用户未输入就报错这是表单体验设计的常见模式。无障碍联动:aria-invalid!!errors.length将校验状态同步到 ARIA 属性配合InputOTPSlot中aria-invalid相关的错误态样式红色边框让屏幕阅读器与视觉提示保持一致。错误展示FieldError仅在存在错误时渲染错误消息与FieldDescription正常提示文案互不干扰。完整的表单集成示例见 InputOTPFormDemo.vue它使用了仓库中同目录下的 Field 组件族 与 Button 组件。可访问性与交互细节源码层面的实现Input OTP 的价值不仅在于视觉更在于「复制粘贴可用、键盘可操作、屏幕阅读器可感知」。这些能力大多由底层vue-input-otp提供并由 shadcn-vue 的封装层以样式和语义完整承接粘贴支持底层OTPInput默认支持将整串验证码一次性粘贴并自动分配到各槽位无需逐位手动输入。自动前进/回退输入一位后焦点自动移到下一位退格时空位会自动回到前一位。假光标Fake Caret在空槽位中渲染一个闪烁的竖线光标见 InputOTPSlot.vue 中基于slot?.hasFakeCaret渲染的animate-caret-blink元素让用户明确感知当前输入位置。激活态样式当前激活槽位通过data-active属性驱动高亮data-[activetrue]:border-ring、data-[activetrue]:ring-3等禁用状态通过has-disabled:opacity-50统一降透明度。语义化角色分隔符带roleseparator根容器带data-slotinput-otp便于开发者与测试工具精确定位。如果你需要完全定制视觉风格可以直接修改槽位的 Tailwind 类如调整h-9 w-9的尺寸、圆角rounded-l-md/rounded-r-md的分组首尾处理分组与分隔逻辑保持不变即可。小结shadcn-vue 的 Input OTP 组件以vue-input-otp为内核通过InputOTP/InputOTPGroup/InputOTPSlot/InputOTPSeparator四个子组件提供了声明式、可组合、可访问的验证码输入方案。无论是简单的六位数字验证码还是带分隔符、自定义字符模式、实时校验的复杂表单场景都可以用本文介绍的方式快速落地。官方文档入口位于 Input OTP 文档源码与演示分别位于 registry/new-york-v4/ui/input-otp 与 components/demo。赞分享UI组件前端【免费下载链接】shadcn-vueVue port of shadcn-ui项目地址https://gitcode.com/gh_mirrors/sh/shadcn-vue点击查看免费下载相关推荐shadcn-svelte Input OTP 组件指南基于 Bits UI PinInput 的可访问一次性密码输入shadcn svelte Input OTP 组件指南基于 Bits UI PinInput 的可访问一次性密码输入 导读 Input OTP 是 shadUI组件前端CLI开发工具shadcn-vue PIN Input 组件完全指南从安装到表单集成的实战详解shadcn vue PIN Input 组件完全指南从安装到表单集成的实战详解 PIN Input 是 shadcn vue 中用于输入一序列单字符字母或UI组件前端Vuetify VOtpInput 组件深度指南用 v-otp-input 构建 MFA 一次性密码输入Vuetify VOtpInput 组件深度指南用 v otp input 构建 MFA 一次性密码输入 本指南围绕 Vuetify 的 VOtpInput前端UI组件上一篇Linux 内核 ARM 平台移植指南解压器与内核符号地址约定详解下一篇9Router 配额跟踪与用量监控实战指南实时追踪 Token 消耗、成本估算与告警机制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
完整 8 步:用 Rufus 绕过 TPM 让老电脑直接安装 Windows 11 完整 8 步:用 Rufus 绕过 TPM 让老电脑直接安装 Windows 11 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus
蓝屏弹出"你的 PC 不符合最低系统要求"的那一刻,你想… · 2026/9/24 17:17:54
CheatSheets 项目 MySQL 速查表全解析:常用 SQL、数据类型与函数操作手册 文档教程知识库 【免费下载链接】reference ⭕ Share quick reference cheat sheet for developers. 项目地址: https://gitcode.com/gh_mirrors/re/reference 点击查看 免费下载 本指南围绕 CheatSheets 开源参考仓库中的 MySQL 速查文档 展开,系统梳理… · 2026/9/24 17:17:54
VMware Workstation 导入 OVF/OVA 虚拟机模板完全指南 开头如果你跟我一样,是个在 Windows 电脑上用 VMware Workstation 跑虚拟机的人,那你大概率遇到过这种情况:从网上下载了一个现成的虚拟机镜像,结果解压出来不是一整个文件夹,而是一堆扩展名很陌生的文件——.ovf、.vm… · 2026/9/24 18:30:30
IM聊天体验三支柱:消息状态、通知触达与多端同步 1. 为什么“聊天体验”不是UI动效,而是消息、通知、多端三根承重柱做即时通讯源码的人,十有八九栽在同一个认知陷阱里:以为把气泡动画调得丝滑、输入框加个打字提示、消息列表用上虚拟滚动,就算“体验做好了”。我带过7个IM项目团… · 2026/9/24 18:30:30
C++俄罗斯方块源码解析:从MFC工程到双缓冲游戏开发实践 简介:这是基于C实现的俄罗斯方块小游戏源码,面向C初学者和游戏开发入门的个人学习者,通过一个可运行的经典小游戏展示窗口程序的基本架构与游戏循环设计。压缩包共27个文件,大小约230KB,其中10个头文件用于类声明与接口… · 2026/9/24 18:30:30
C#医药销售管理系统源码解析:批号效期与数据库设计实战 简介:基于C#的医药销售管理系统完整项目,面向需要掌握C# WinForm开发与SQL Server数据库操作的计算机专业学生或初级开发者。系统涵盖药品信息管理、查询等核心模块,可直接附加数据库并登录使用,便于学习典型进销存业务流程。压缩… · 2026/9/24 18:30:30
麦芽AI与Cursor:研发工作流中的AI协同范式 1. 这不是工具选择题,而是产研节奏的校准器麦芽AI 和 Cursor,这两个名字最近在技术团队的晨会、代码评审和 Slack 频道里出现的频率,已经快赶上“这个需求能不能下周上线”了。我带过三支不同规模的产研团队,从十几人的初创 SaaS … · 2026/9/24 18:30:30
Excel打开文件报serious error?一套完整的排查修复与预防指南 打开Excel准备改一下报价表,屏幕上弹出的却不是表格内容,而是那个让人血压瞬间升高的提示框:某个文件导致 Microsoft Excel 发生严重错误(serious error)。紧接着整个程序崩溃,刚改了一半的文档还没保存。这… · 2026/9/24 18:30:23
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44