Vant4 Stepper 步進器

2023-02-16 17:55 更新

介紹

步進器由增加按鈕、減少按鈕和輸入框組成,用于在一定范圍內輸入、調整數字。

引入

通過以下方式來全局注冊組件,更多注冊方式請參考組件注冊。

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? 屬性設置每次點擊增加或減少按鈕時變化的值,默認為 ?1?。

<van-stepper v-model="value" step="2" />

限制輸入范圍

通過 ?min? 和 ?max? 屬性限制輸入值的范圍,默認超出范圍后會自動校正最大值或最小值,通過 ?auto-fixed? 可以關閉自動校正。

<van-stepper v-model="value" min="5" max="8" />

限制輸入整數

設置 ?integer? 屬性后,輸入框將限制只能輸入整數。

<van-stepper v-model="value" integer />

禁用狀態(tài)

通過設置 ?disabled? 屬性來禁用步進器,禁用狀態(tài)下無法點擊按鈕或修改輸入框。

<van-stepper v-model="value" disabled />

禁用輸入框

通過設置 ?disable-input? 屬性來禁用輸入框,此時按鈕仍然可以點擊。

<van-stepper v-model="value" disable-input />

固定小數位數

通過設置 ?decimal-length? 屬性可以保留固定的小數位數。

<van-stepper v-model="value" step="0.2" :decimal-length="1" />

自定義大小

通過 ?input-width? 屬性設置輸入框寬度,通過 ?button-size? 屬性設置按鈕大小和輸入框高度。

<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 { closeToast, showLoadingToast } from 'vant';

export default {
  setup() {
    const value = ref(1);

    const beforeChange = (value) => {
      showLoadingToast({ forbidClick: true });

      return new Promise((resolve) => {
        setTimeout(() => {
          closeToast();
          // 在 resolve 函數中返回 true 或 false
          resolve(true);
        }, 500);
      });
    };

    return {
      value,
      beforeChange,
    };
  },
};

圓角風格

將 ?theme? 設置為 ?round? 來展示圓角風格的步進器。

<van-stepper v-model="value" theme="round" button-size="22" disable-input />

API

Props

參數 說明 類型 默認值
v-model 當前輸入的值 number | string -
min 最小值 number | string 1
max 最大值 number | string -
auto-fixed 是否自動校正超出限制范圍的數值,設置為 false 后輸入超過限制范圍的數值將不會自動校正 boolean true
default-value 初始值,當 v-model 為空時生效 number | string 1
step 步長,每次點擊時改變的值 number | string 1
name 標識符,通常為一個唯一的字符串或數字,可以在 change 事件回調參數中獲取 number | string -
input-width 輸入框寬度,默認單位為 px number | string 32px
button-size 按鈕大小以及輸入框高度,默認單位為 px number | string 28px
decimal-length 固定顯示的小數位數 number | string -
theme 樣式風格,可選值為 round string -
placeholder 輸入框占位提示文字 string -
integer 是否只允許輸入整數 boolean false
disabled 是否禁用步進器 boolean false
disable-plus 是否禁用增加按鈕 boolean false
disable-minus 是否禁用減少按鈕 boolean false
disable-input 是否禁用輸入框 boolean false
before-change 輸入值變化前的回調函數,返回 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 是否允許輸入的值為空,設置為 true 后允許傳入空字符串 boolean false

Events

事件名 說明 回調參數
change 當綁定值變化時觸發(fā)的事件 value: string, detail: { name: string }
overlimit 點擊不可用的按鈕時觸發(fā) -
plus 點擊增加按鈕時觸發(fā) -
minus 點擊減少按鈕時觸發(fā) -
focus 輸入框聚焦時觸發(fā) event: Event
blur 輸入框失焦時觸發(fā) event: Event

類型定義

組件導出以下類型定義:

import type { StepperTheme, StepperProps } from 'vant';

主題定制

樣式變量

組件提供了下列 CSS 變量,可用于自定義樣式,使用方法請參考 ConfigProvider 組件。

名稱 默認值 描述
--van-stepper-background var(--van-active-color) -
--van-stepper-button-icon-color var(--van-text-color) -
--van-stepper-button-disabled-color var(--van-background) -
--van-stepper-button-disabled-icon-color var(--van-gray-5) -
--van-stepper-button-round-theme-color var(--van-primary-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-text-color-3) -
--van-stepper-input-disabled-background var(--van-active-color) -
--van-stepper-radius var(--van-radius-md) -

常見問題

為什么 value 有時候會變成 string 類型?

這是因為用戶輸入過程中可能出現小數點或空值,比如 ?1.?,這種情況下組件會拋出字符串類型。

如果希望 value 保持 number 類型,可以在 v-model 上添加 ?number? 修飾符:

<van-stepper v-model.number="value" />


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號