步進器由增加按鈕、減少按鈕和輸入框組成,用于在一定范圍內(nèi)輸入、調(diào)整數(shù)字。
通過以下方式來全局注冊組件,更多注冊方式請參考組件注冊。
import { createApp } from 'vue';
import { Stepper } from 'vant';
const app = createApp();
app.use(Stepper);
通過 v-model 綁定輸入值,可以通過 change 事件監(jiān)聽到輸入值的變化。
<van-stepper v-model="value" />
import { ref } from 'vue';
export default {
setup() {
const value = ref(1);
return { value };
},
};
通過 step 屬性設(shè)置每次點擊增加或減少按鈕時變化的值,默認為 1。
<van-stepper v-model="value" step="2" />
通過 min 和 max 屬性限制輸入值的范圍。
<van-stepper v-model="value" min="5" max="8" />
設(shè)置 integer 屬性后,輸入框?qū)⑾拗浦荒茌斎胝麛?shù)。
<van-stepper v-model="value" integer />
通過設(shè)置 disabled 屬性來禁用步進器,禁用狀態(tài)下無法點擊按鈕或修改輸入框。
<van-stepper v-model="value" disabled />
通過設(shè)置 disable-input 屬性來禁用輸入框,此時按鈕仍然可以點擊。
<van-stepper v-model="value" disable-input />
通過設(shè)置 decimal-length 屬性可以保留固定的小數(shù)位數(shù)。
<van-stepper v-model="value" step="0.2" :decimal-length="1" />
通過 input-width 屬性設(shè)置輸入框?qū)挾?,通過 button-size 屬性設(shè)置按鈕大小和輸入框高度。
<van-stepper v-model="value" input-width="40px" button-size="32px" />
通過 before-change 屬性可以在輸入值變化前進行校驗和攔截。
<van-stepper v-model="value" :before-change="beforeChange" />
import { ref } from 'vue';
import { Toast } from 'vant';
export default {
setup() {
const value = ref(1);
const beforeChange = (value) => {
Toast.loading({ forbidClick: true });
return new Promise((resolve) => {
setTimeout(() => {
Toast.clear();
// 在 resolve 函數(shù)中返回 true 或 false
resolve(true);
}, 500);
});
};
return {
value,
beforeChange,
};
},
};
將 theme 設(shè)置為 round 來展示圓角風(fēng)格的步進器。
<van-stepper v-model="value" theme="round" button-size="22" disable-input />
參數(shù) | 說明 | 類型 | 默認值 |
---|---|---|---|
v-model | 當(dāng)前輸入的值 | number | string | - |
min | 最小值 | number | string | 1
|
max | 最大值 | number | string | - |
default-value | 初始值,當(dāng) v-model 為空時生效 | number | string | 1
|
step | 步長,每次點擊時改變的值 | number | string | 1
|
name | 標(biāo)識符,可以在 change 事件回調(diào)參數(shù)中獲取 |
number | string | - |
input-width | 輸入框?qū)挾龋J單位為 px
|
number | string | 32px
|
button-size | 按鈕大小以及輸入框高度,默認單位為 px
|
number | string | 28px
|
decimal-length | 固定顯示的小數(shù)位數(shù) | number | string | - |
theme | 樣式風(fēng)格,可選值為 round
|
string | - |
placeholder | 輸入框占位提示文字 | string | - |
integer | 是否只允許輸入整數(shù) | boolean | false
|
disabled | 是否禁用步進器 | boolean | false
|
disable-plus | 是否禁用增加按鈕 | boolean | false
|
disable-minus | 是否禁用減少按鈕 | boolean | false
|
disable-input | 是否禁用輸入框 | boolean | false
|
before-change | 輸入值變化前的回調(diào)函數(shù),返回 false 可阻止輸入,支持返回 Promise |
(value: number | string) => boolean | Promise<boolean> | false
|
show-plus | 是否顯示增加按鈕 | boolean | true
|
show-minus | 是否顯示減少按鈕 | boolean | true
|
show-input | 是否顯示輸入框 | boolean | true
|
long-press | 是否開啟長按手勢 | boolean | true
|
allow-empty | 是否允許輸入的值為空 | boolean | false
|
事件名 | 說明 | 回調(diào)參數(shù) |
---|---|---|
change | 當(dāng)綁定值變化時觸發(fā)的事件 | value: string, detail: { name: string } |
overlimit | 點擊不可用的按鈕時觸發(fā) | - |
plus | 點擊增加按鈕時觸發(fā) | - |
minus | 點擊減少按鈕時觸發(fā) | - |
focus | 輸入框聚焦時觸發(fā) | event: Event |
blur | 輸入框失焦時觸發(fā) | event: Event |
組件提供了下列 CSS 變量,可用于自定義樣式,使用方法請參考 ConfigProvider 組件。
名稱 | 默認值 | 描述 |
---|---|---|
--van-stepper-active-color | #e8e8e8 | - |
--van-stepper-background-color | var(--van-active-color) | - |
--van-stepper-button-icon-color | var(--van-text-color) | - |
--van-stepper-button-disabled-color | var(--van-background-color) | - |
--van-stepper-button-disabled-icon-color | var(--van-gray-5) | - |
--van-stepper-button-round-theme-color | var(--van-danger-color) | - |
--van-stepper-input-width | 32px | - |
--van-stepper-input-height | 28px | - |
--van-stepper-input-font-size | var(--van-font-size-md) | - |
--van-stepper-input-line-height | normal | - |
--van-stepper-input-text-color | var(--van-text-color) | - |
--van-stepper-input-disabled-text-color | var(--van-gray-5) | - |
--van-stepper-input-disabled-background-color | var(--van-active-color) | - |
--van-stepper-border-radius | var(--van-border-radius-md) | - |
這是因為用戶輸入過程中可能出現(xiàn)小數(shù)點或空值,比如 1.,這種情況下組件會拋出字符串類型。
如果希望 value 保持 number 類型,可以在 v-model 上添加 number 修飾符:
<van-stepper v-model.number="value" />
更多建議: