Vue 3 数字加减步进器需封装为支持 v-model 双向绑定的表单组件,接收 modelValue、emit update:modelValue,支持 step/min/max/integer 等配置,兼顾输入过滤、失焦校验、边界修正及移动端交互细节。

在 Vue 3 中实现数字加减步进器,核心是封装一个支持 v-model 双向绑定的自定义表单组件,同时兼顾输入校验、步长控制、边界限制等常见需求。它不是简单写个加减按钮,而是要符合 Vue 的表单组件规范,能被 v-model 正确驱动,也能响应用户手动输入和失焦行为。
用 v-model 实现双向绑定
Vue 3 中 v-model 默认绑定 modelValue prop 并监听 update:modelValue 事件。组件需按此约定设计:
- 接收
modelValue作为当前值(类型建议为Number | string,兼容初始空值或字符串输入) - 点击“+”或“−”时计算新值,调用
ctx.emit('update:modelValue', newValue) - 输入框使用
v-model.number绑定,自动转数值;配合@blur做格式归一(如非数字清空、超出范围截断) - 注意:不要直接修改
props.modelValue,所有变更必须通过emit
支持步长、整数限制与范围控制
实际业务中,步进器常需灵活配置。可通过 props 暴露关键参数:
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
-
step:每次增减的数值,默认1;支持小数(如0.5),此时需配合decimal-length控制显示位数 -
min/max:设置合法值区间;按钮应禁用(:disabled)或视觉置灰,输入框失焦时自动修正到边界 -
integer:布尔值,启用后禁止小数输入,@input阶段可正则过滤掉小数点和非数字字符
处理手动输入与防误操作
用户可能直接在输入框里粘贴、输入非法内容,不能只依赖按钮逻辑:
立即学习“前端免费学习笔记(深入)”;
-
@input时做轻量过滤(如只保留数字、小数点、负号),避免实时重绘抖动 -
@blur时做强校验:转数值 → 检查 NaN / 超限 → 修正并触发update:modelValue - 对空值、
null、undefined做容错,例如显示为空字符串或默认值0 - 可选加
disabled、disabledInput、disablePlus等开关,满足不同交互状态
样式与交互细节建议
视觉和体验影响组件可用性:
- 按钮点击区域建议 ≥ 44px,适配移动端;图标 + 文字(如“−1”“+1”)比纯符号更明确
- 输入框聚焦时高亮边框,失焦后立即校验并更新显示值
- 长按连续增减(可选):用
setTimeout+setInterval实现,松开鼠标/手指时清除定时器 - 若需异步更新(如提交后才生效),设
asyncChange开关,由父组件控制最终值回填

















