Vant3 Field 輸入框

2021-09-07 16:03 更新

介紹

用戶可以在文本框內(nèi)輸入或編輯文字。

實例演示

引入

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

import { createApp } from 'vue';
import { Field, CellGroup } from 'vant';

const app = createApp();
app.use(Field);
app.use(CellGroup);

代碼演示

基礎(chǔ)用法

可以通過 v-model 雙向綁定輸入框的值,通過 placeholder 設(shè)置占位提示文字。

基礎(chǔ)用法

<!-- 可以使用 CellGroup 作為容器 -->
<van-cell-group inset>
  <van-field v-model="value" label="文本" placeholder="請輸入用戶名" />
</van-cell-group>
import { ref } from 'vue';

export default {
  setup() {
    const value = ref('');
    return { value };
  },
};

自定義類型

根據(jù) type 屬性定義不同類型的輸入框,默認值為 text。

自定義類型

<van-cell-group inset>
  <!-- 輸入任意文本 -->
  <van-field v-model="state.text" label="文本" />
  <!-- 輸入手機號,調(diào)起手機號鍵盤 -->
  <van-field v-model="state.tel" type="tel" label="手機號" />
  <!-- 允許輸入正整數(shù),調(diào)起純數(shù)字鍵盤 -->
  <van-field v-model="state.digit" type="digit" label="整數(shù)" />
  <!-- 允許輸入數(shù)字,調(diào)起帶符號的純數(shù)字鍵盤 -->
  <van-field v-model="state.number" type="number" label="數(shù)字" />
  <!-- 輸入密碼 -->
  <van-field v-model="state.password" type="password" label="密碼" />
</van-cell-group>
import { reactive } from 'vue';

export default {
  setup() {
    const state = reactive({
      tel: '',
      text: '',
      digit: '',
      number: '',
      password: '',
    });

    return { state };
  },
};

禁用輸入框

通過 readonly 將輸入框設(shè)置為只讀狀態(tài),通過 disabled 將輸入框設(shè)置為禁用狀態(tài)。

禁用輸入框

<van-cell-group inset>
  <van-field label="文本" model-value="輸入框只讀" readonly />
  <van-field label="文本" model-value="輸入框已禁用" disabled />
</van-cell-group>

顯示圖標

通過 left-icon 和 right-icon 配置輸入框兩側(cè)的圖標,通過設(shè)置 clearable 在輸入過程中展示清除圖標。

顯示圖標

<van-cell-group inset>
  <van-field
    v-model="state.value1"
    label="文本"
    left-icon="smile-o"
    right-icon="warning-o"
    placeholder="顯示圖標"
  />
  <van-field
    v-model="state.value2"
    clearable
    label="文本"
    left-icon="music-o"
    placeholder="顯示清除圖標"
  />
</van-cell-group>
import { reactive } from 'vue';

export default {
  setup() {
    const state = reactive({
      value1: '',
      value2: '123',
    });

    return { state };
  },
};

錯誤提示

設(shè)置 required 屬性表示這是一個必填項,可以配合 error 或 error-message 屬性顯示對應(yīng)的錯誤提示。

錯誤提示

<van-cell-group inset>
  <van-field
    v-model="username"
    error
    required
    label="用戶名"
    placeholder="請輸入用戶名"
  />
  <van-field
    v-model="phone"
    required
    label="手機號"
    placeholder="請輸入手機號"
    error-message="手機號格式錯誤"
  />
</van-cell-group>

插入按鈕

通過 button 插槽可以在輸入框尾部插入按鈕。

插入按鈕

<van-cell-group inset>
  <van-field
    v-model="sms"
    center
    clearable
    label="短信驗證碼"
    placeholder="請輸入短信驗證碼"
  >
    <template #button>
      <van-button size="small" type="primary">發(fā)送驗證碼</van-button>
    </template>
  </van-field>
</van-cell-group>

格式化輸入內(nèi)容

通過 formatter 屬性可以對輸入的內(nèi)容進行格式化,通過 format-trigger 屬性可以指定執(zhí)行格式化的時機,默認在輸入時進行格式化。

格式化輸入內(nèi)容

<van-cell-group inset>
  <van-field
    v-model="state.value1"
    label="文本"
    :formatter="formatter"
    placeholder="在輸入時執(zhí)行格式化"
  />
  <van-field
    v-model="state.value2"
    label="文本"
    :formatter="formatter"
    format-trigger="onBlur"
    placeholder="在失焦時執(zhí)行格式化"
  />
</van-cell-group>
import { reactive } from 'vue';

export default {
  setup() {
    const state = reactive({
      value1: '',
      value2: '',
    });
    // 過濾輸入的數(shù)字
    const formatter = (value) => value.replace(/\d/g, '');

    return {
      state,
      formatter,
    };
  },
};

高度自適應(yīng)

對于 textarea,可以通過 autosize 屬性設(shè)置高度自適應(yīng)。

高度自適應(yīng)

<van-cell-group inset>
  <van-field
    v-model="message"
    rows="1"
    autosize
    label="留言"
    type="textarea"
    placeholder="請輸入留言"
  />
</van-cell-group>

顯示字數(shù)統(tǒng)計

設(shè)置 maxlength 和 show-word-limit 屬性后會在底部顯示字數(shù)統(tǒng)計。

字數(shù)統(tǒng)計

<van-cell-group inset>
  <van-field
    v-model="message"
    rows="2"
    autosize
    label="留言"
    type="textarea"
    maxlength="50"
    placeholder="請輸入留言"
    show-word-limit
  />
</van-cell-group>

輸入框內(nèi)容對齊

通過 input-align 屬性可以設(shè)置輸入框內(nèi)容的對齊方式,可選值為 center、right。

輸入框內(nèi)容對齊

<van-cell-group inset>
  <van-field
    v-model="value"
    label="文本"
    placeholder="輸入框內(nèi)容右對齊"
    input-align="right"
  />
</van-cell-group>

API

Props

參數(shù) 說明 類型 默認值
v-model 當前輸入的值 number | string -
label 輸入框左側(cè)文本 string -
name 名稱,提交表單的標識符 string -
type 輸入框類型, 可選值為 tel digit
number textarea password 等
string text
size 大小,可選值為 large string -
maxlength 輸入的最大字符數(shù) number | string -
placeholder 輸入框占位提示文字 string -
border 是否顯示內(nèi)邊框 boolean true
disabled 是否禁用輸入框 boolean false
readonly 是否為只讀狀態(tài),只讀狀態(tài)下無法輸入內(nèi)容 boolean false
colon 是否在 label 后面添加冒號 boolean false
required 是否顯示表單必填星號 boolean false
center 是否使內(nèi)容垂直居中 boolean false
clearable 是否啟用清除圖標,點擊清除圖標后會清空輸入框 boolean false
clear-icon v3.0.12 清除圖標名稱或圖片鏈接 string clear
clear-trigger 顯示清除圖標的時機,always 表示輸入框不為空時展示,
focus 表示輸入框聚焦且不為空時展示
string focus
clickable 是否開啟點擊反饋 boolean false
is-link 是否展示右側(cè)箭頭并開啟點擊反饋 boolean false
autofocus 是否自動聚焦,iOS 系統(tǒng)不支持該屬性 boolean false
show-word-limit 是否顯示字數(shù)統(tǒng)計,需要設(shè)置 maxlength 屬性 boolean false
error 是否將輸入內(nèi)容標紅 boolean false
error-message 底部錯誤提示文案,為空時不展示 string -
error-message-align 錯誤提示文案對齊方式,可選值為 center right string left
formatter 輸入內(nèi)容格式化函數(shù) (val: string) => string -
format-trigger 格式化函數(shù)觸發(fā)的時機,可選值為 onBlur string onChange
arrow-direction 箭頭方向,可選值為 left up down string right
label-class 左側(cè)文本額外類名 string | Array | object -
label-width 左側(cè)文本寬度,默認單位為 px number | string 6.2em
label-align 左側(cè)文本對齊方式,可選值為 center right string left
input-align 輸入框?qū)R方式,可選值為 center right string left
autosize 是否自適應(yīng)內(nèi)容高度,只對 textarea 有效,
可傳入對象,如 { maxHeight: 100, minHeight: 50 },
單位為px
boolean | object false
left-icon 左側(cè)圖標名稱或圖片鏈接 string -
right-icon 右側(cè)圖標名稱或圖片鏈接 string -
icon-prefix 圖標類名前綴,同 Icon 組件的 class-prefix 屬性 string van-icon
rules 表單校驗規(guī)則,詳見 Form 組件 Rule[] -
autocomplete v3.0.3 input 標簽原生的自動完成屬性 string -

Events

事件 說明 回調(diào)參數(shù)
update:model-value 輸入框內(nèi)容變化時觸發(fā) value: string (當前輸入的值)
focus 輸入框獲得焦點時觸發(fā) event: Event
blur 輸入框失去焦點時觸發(fā) event: Event
clear 點擊清除按鈕時觸發(fā) event: MouseEvent
click 點擊組件時觸發(fā) event: MouseEvent
click-input 點擊輸入?yún)^(qū)域時觸發(fā) event: MouseEvent
click-left-icon 點擊左側(cè)圖標時觸發(fā) event: MouseEvent
click-right-icon 點擊右側(cè)圖標時觸發(fā) event: MouseEvent

方法

通過 ref 可以獲取到 Field 實例并調(diào)用實例方法,詳見組件實例方法

方法名 說明 參數(shù) 返回值
focus 獲取輸入框焦點 - -
blur 取消輸入框焦點 - -

Slots

名稱 說明
label 自定義輸入框左側(cè)文本
input 自定義輸入框,使用此插槽后,與輸入框相關(guān)的屬性和事件將失效。
在 Form 組件進行表單校驗時,會使用 input 插槽中子組件的 value,而不是 Field 組件的 value
left-icon 自定義輸入框頭部圖標
right-icon 自定義輸入框尾部圖標
button 自定義輸入框尾部按鈕
extra 自定義輸入框最右側(cè)的額外內(nèi)容

主題定制

樣式變量

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

名稱 默認值 描述
--van-field-label-width 6.2em -
--van-field-label-color var(--van-gray-7) -
--van-field-label-margin-right var(--van-padding-sm) -
--van-field-input-text-color var(--van-text-color) -
--van-field-input-error-text-color var(--van-danger-color) -
--van-field-input-disabled-text-color var(--van-gray-5) -
--van-field-placeholder-text-color var(--van-gray-5) -
--van-field-icon-size 16px -
--van-field-clear-icon-size 16px -
--van-field-clear-icon-color var(--van-gray-5) -
--van-field-right-icon-color var(--van-gray-6) -
--van-field-error-message-color var(--van-danger-color) -
--van-field-error-message-text-color 12px -
--van-field-text-area-min-height 60px -
--van-field-word-limit-color var(--van-gray-7) -
--van-field-word-limit-font-size var(--van-font-size-sm) -
--van-field-word-limit-line-height 16px -
--van-field-disabled-text-color var(--van-gray-5) -
--van-field-required-mark-color var(--van-red) -

常見問題

設(shè)置 type 為 number 后,為什么 input 標簽的類型仍為 text?

HTML 原生的 type="number" 屬性在 iOS 和 Android 系統(tǒng)上都存在一定問題,比如 maxlength 屬性不生效、無法獲取到完整的輸入內(nèi)容等。因此設(shè)置 type 為 number 時,F(xiàn)ield 不會使用原生的 type="number" 屬性,而是用現(xiàn)代瀏覽器支持的 inputmode 屬性來控制輸入鍵盤的類型。

在桌面端點擊清除按鈕無效?

清除按鈕監(jiān)聽是的移動端 Touch 事件,參見桌面端適配。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號