Skip to content

Stepper 步进器 ​

用于通过加减按钮或直接输入的方式快速调整数值,常见于商品数量、库存、份数等场景。

交互式调试 ​

🔧调试模式Playground

基础用法 ​

vue
<script setup lang="ts">
import { ref } from 'vue'

const count = ref(1)
</script>

<template>
  <lk-stepper v-model="count" />
</template>

范围与步长 ​

min、max、step 支持整数与小数。

vue
<lk-stepper v-model="count" min="0" max="10" step="0.2" />

仅允许整数 ​

启用 integer 后,即使输入小数,失焦时也会自动修正为整数。

vue
<lk-stepper v-model="count" integer />

禁用输入或组件 ​

vue
<template>
  <lk-stepper :model-value="3" disabled />
  <lk-stepper v-model="count" disable-input />
</template>

自定义尺寸 ​

vue
<template>
  <lk-stepper v-model="small" size="sm" />
  <lk-stepper v-model="medium" size="md" />
  <lk-stepper v-model="large" size="lg" />
</template>

变更前拦截 ​

通过 beforeChange 可以接入库存校验、权限校验、异步确认等业务逻辑。

vue
<script setup lang="ts">
const beforeChange = async (value: number) => {
  if (value > 5) {
    uni.showToast({ title: '库存不足', icon: 'none' })
    return false
  }
  return true
}
</script>

<template>
  <lk-stepper v-model="count" :before-change="beforeChange" />
</template>

事件监听 ​

vue
<template>
  <lk-stepper
    v-model="count"
    :min="1"
    :max="5"
    @input="value => console.log('input:', value)"
    @change="(value, action) => console.log(value, action)"
    @plus="value => console.log('plus:', value)"
    @minus="value => console.log('minus:', value)"
    @overlimit="(type, limit) => console.log(type, limit)"
    @change-cancel="(value, action, reason) => console.log(value, action, reason)"
  />
</template>

推荐示例 ​

1) 直接复用项目 Demo(推荐) ​

vue
<script setup lang="ts">
import StepperDemo from '@/components/demos/stepper-demo.vue'
</script>

<template>
  <StepperDemo />
</template>

2) 在业务页中按需组合 ​

vue
<template>
  <view class="page-demo">
    <lk-stepper />
  </view>
</template>

API ​

Props ​

参数说明类型可选值默认值
modelValue当前值number / string—0
min最小值number / string—1
max最大值number / string—Infinity
step步长number / string—1
integer是否只允许整数boolean—false
disabled是否禁用boolean—false
disableInput是否禁用输入框,仅允许按钮调整boolean—false
longPress是否开启长按连续加减boolean—true
size组件尺寸stringsm / md / lgmd
inputWidth输入框宽度,数字按 rpx 处理number / string—''
buttonSize按钮宽度,数字按 rpx 处理number / string—''
beforeChange变更前拦截,返回 false 或 Promise<false> 可阻止更新(value: number) => boolean / Promise<boolean>—null
prop表单字段名,配合 lk-form 联动校验string—''
validateEvent值变更时是否触发表单校验boolean—true
id根节点 idstring—''
customClass自定义类名string / object / array—''
customStyle自定义样式string / object—''

Events ​

事件名说明回调参数
update:modelValue当前值变化(value: number | string)
change值变更完成时触发(value: number | string, action: 'minus' | 'plus' | 'input')
input输入框输入时触发,值未必已格式化(value: string)
plus点击或长按加号且变更成功时触发(value: number)
minus点击或长按减号且变更成功时触发(value: number)
overlimit点击超出边界时触发(type: 'minus' | 'plus', limit: number)
before-change执行变更前触发(value: number, action: 'minus' | 'plus' | 'input')
change-cancel变更被拦截或异常中断时触发(value: number, action: 'minus' | 'plus' | 'input', reason: 'before-change' | 'error')
focus输入框聚焦(event: Event)
blur输入框失焦(event: Event)

Slots ​

无

使用建议 ​

TIP

如果值必须与库存、价格、业务规则联动,优先使用 beforeChange 统一拦截,而不是在 change 后再回滚。

WARNING

组件内部会在失焦时自动修正范围与格式,因此不要依赖输入过程中的临时值作为最终业务值。

基于 MIT 协议开源

Stepper 步进器

正在连接预览服务...

请先运行 pnpm run dev:h5