用戶可以在文本框內(nèi)輸入或編輯文字。
通過以下方式來全局注冊組件,更多注冊方式請參考組件注冊。
import { createApp } from 'vue';
import { Field, CellGroup } from 'vant';
const app = createApp();
app.use(Field);
app.use(CellGroup);
可以通過 ?v-model
? 雙向綁定輸入框的值,通過 ?placeholder
? 設(shè)置占位提示文字。
<!-- 可以使用 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
? 屬性定義不同類型的輸入框,默認(rèn)值為 ?text
?。
<van-cell-group inset>
<!-- 輸入任意文本 -->
<van-field v-model="text" label="文本" />
<!-- 輸入手機號,調(diào)起手機號鍵盤 -->
<van-field v-model="tel" type="tel" label="手機號" />
<!-- 允許輸入正整數(shù),調(diào)起純數(shù)字鍵盤 -->
<van-field v-model="digit" type="digit" label="整數(shù)" />
<!-- 允許輸入數(shù)字,調(diào)起帶符號的純數(shù)字鍵盤 -->
<van-field v-model="number" type="number" label="數(shù)字" />
<!-- 輸入密碼 -->
<van-field v-model="password" type="password" label="密碼" />
</van-cell-group>
import { ref } from 'vue';
export default {
setup() {
const tel = ref('');
const text = ref('');
const digit = ref('');
const number = ref('');
const password = ref('');
return { tel, text, digit, number, password };
},
};
通過 ?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è)的圖標(biāo),通過設(shè)置 ?clearable
? 在輸入過程中展示清除圖標(biāo)。
<van-cell-group inset>
<van-field
v-model="value1"
label="文本"
left-icon="smile-o"
right-icon="warning-o"
placeholder="顯示圖標(biāo)"
/>
<van-field
v-model="value2"
clearable
label="文本"
left-icon="music-o"
placeholder="顯示清除圖標(biāo)"
/>
</van-cell-group>
import { ref } from 'vue';
export default {
setup() {
const value1 = ref('');
const value2 = ref('123');
return {
value1,
value2,
};
},
};
設(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>
通過 ?formatter
? 屬性可以對輸入的內(nèi)容進(jìn)行格式化,通過 ?format-trigger
? 屬性可以指定執(zhí)行格式化的時機,默認(rèn)在輸入時進(jìn)行格式化。
<van-cell-group inset>
<van-field
v-model="value1"
label="文本"
:formatter="formatter"
placeholder="在輸入時執(zhí)行格式化"
/>
<van-field
v-model="value2"
label="文本"
:formatter="formatter"
format-trigger="onBlur"
placeholder="在失焦時執(zhí)行格式化"
/>
</van-cell-group>
import { ref } from 'vue';
export default {
setup() {
const value1 = ref('');
const value2 = ref('');
// 過濾輸入的數(shù)字
const formatter = (value) => value.replace(/\d/g, '');
return {
value1,
value2,
formatter,
};
},
};
對于 textarea,可以通過 ?autosize
? 屬性設(shè)置高度自適應(yīng)。
<van-cell-group inset>
<van-field
v-model="message"
rows="1"
autosize
label="留言"
type="textarea"
placeholder="請輸入留言"
/>
</van-cell-group>
設(shè)置 ?maxlength
? 和 ?show-word-limit
? 屬性后會在底部顯示字?jǐn)?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>
通過 ?input-align
? 屬性可以設(shè)置輸入框內(nèi)容的對齊方式,可選值為 ?center
?、?right
?。
<van-cell-group inset>
<van-field
v-model="value"
label="文本"
placeholder="輸入框內(nèi)容右對齊"
input-align="right"
/>
</van-cell-group>
通過 ?label-align
? 屬性可以設(shè)置輸入框文本的位置,可選值為 ?center
?、?right
?、?top
?。
<van-cell-group inset>
<van-field
v-model="value"
label="手機號"
placeholder="請輸入手機號"
label-align="top"
/>
</van-cell-group>
參數(shù) | 說明 | 類型 | 默認(rèn)值 |
---|---|---|---|
v-model | 當(dāng)前輸入的值 | number | string | - |
label | 輸入框左側(cè)文本 | string | - |
name | 名稱,作為提交表單時的標(biāo)識符 | string | - |
id v3.2.2
|
輸入框 id,同時會設(shè)置 label 的 for 屬性 | string | van-field-n-input
|
type | 輸入框類型, 支持原生 input 標(biāo)簽的所有 type 屬性,額外支持了 digit 類型 |
FieldType | 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 | 是否啟用清除圖標(biāo),點擊清除圖標(biāo)后會清空輸入框 | boolean | false
|
clear-icon v3.0.12
|
清除圖標(biāo)名稱或圖片鏈接,等同于 Icon 組件的 name 屬性 | string | clear
|
clear-trigger | 顯示清除圖標(biāo)的時機,always 表示輸入框不為空時展示,
focus 表示輸入框聚焦且不為空時展示 |
FieldClearTrigger | focus
|
clickable | 是否開啟點擊反饋 | boolean | false
|
is-link | 是否展示右側(cè)箭頭并開啟點擊反饋 | boolean | false
|
autofocus | 是否自動聚焦,iOS 系統(tǒng)不支持該屬性 | boolean | false
|
show-word-limit | 是否顯示字?jǐn)?shù)統(tǒng)計,需要設(shè)置 maxlength 屬性 |
boolean | false
|
error | 是否將輸入內(nèi)容標(biāo)紅 | boolean | false
|
error-message | 底部錯誤提示文案,為空時不展示 | string | - |
error-message-align | 錯誤提示文案對齊方式,可選值為 center right
|
FieldTextAlign | left
|
formatter | 輸入內(nèi)容格式化函數(shù) | (val: string) => string | - |
format-trigger | 格式化函數(shù)觸發(fā)的時機,可選值為 onBlur
|
FieldFormatTrigger | onChange
|
arrow-direction | 箭頭方向,可選值為 left up down
|
string | right
|
label-class | 左側(cè)文本額外類名 | string | Array | object | - |
label-width | 左側(cè)文本寬度,默認(rèn)單位為 px
|
number | string | 6.2em
|
label-align | 左側(cè)文本對齊方式,可選值為 center right top
|
FieldTextAlign | left
|
input-align | 輸入框?qū)R方式,可選值為 center right
|
FieldTextAlign | left
|
autosize | 是否自適應(yīng)內(nèi)容高度,只對 textarea 有效,
可傳入對象,如 { maxHeight: 100, minHeight: 50 }, 單位為 px
|
boolean | FieldAutosizeConfig | false
|
left-icon | 左側(cè)圖標(biāo)名稱或圖片鏈接,等同于 Icon 組件的 name 屬性 | string | - |
right-icon | 右側(cè)圖標(biāo)名稱或圖片鏈接,等同于 Icon 組件的 name 屬性 | string | - |
icon-prefix | 圖標(biāo)類名前綴,等同于 Icon 組件的 class-prefix 屬性 | string | van-icon
|
rules | 表單校驗規(guī)則,詳見 Form 組件 | FieldRule[] | - |
autocomplete v3.0.3
|
HTML 原生屬性,用于控制自動完成功能,詳見 MDN - autocomplete | string | - |
enterkeyhint v3.4.8
|
HTML 原生屬性,用于控制回車鍵樣式,此 API 僅在部分瀏覽器支持,詳見 MDN - enterkeyhint
|
string | - |
事件 | 說明 | 回調(diào)參數(shù) |
---|---|---|
update:model-value | 輸入框內(nèi)容變化時觸發(fā) | value: string (當(dāng)前輸入的值) |
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è)圖標(biāo)時觸發(fā) | event: MouseEvent |
click-right-icon | 點擊右側(cè)圖標(biāo)時觸發(fā) | event: MouseEvent |
start-validate v3.5.1
|
開始表單校驗時觸發(fā) | - |
end-validate v3.5.1
|
結(jié)束表單校驗時觸發(fā) | { status: string, message: string } |
通過 ref 可以獲取到 Field 實例并調(diào)用實例方法,詳見組件實例方法。
方法名 | 說明 | 參數(shù) | 返回值 |
---|---|---|---|
focus | 獲取輸入框焦點 | - | - |
blur | 取消輸入框焦點 | - | - |
組件導(dǎo)出以下類型定義:
import type {
FieldType,
FieldRule,
FieldProps,
FieldInstance,
FieldTextAlign,
FieldRuleMessage,
FieldClearTrigger,
FieldFormatTrigger,
FieldRuleValidator,
FiledRuleFormatter,
FieldValidateError,
FieldAutosizeConfig,
FieldValidateTrigger,
FieldValidationStatus,
} from 'vant';
?FieldInstance
? 是組件實例的類型,用法如下:
import { ref } from 'vue';
import type { FieldInstance } from 'vant';
const fieldRef = ref<FieldInstance>();
fieldRef.value?.focus();
名稱 | 說明 | 參數(shù) |
---|---|---|
label | 自定義輸入框左側(cè)文本 | - |
input | 自定義輸入框,使用此插槽后,與輸入框相關(guān)的屬性和事件將失效 | - |
left-icon | 自定義輸入框頭部圖標(biāo) | - |
right-icon | 自定義輸入框尾部圖標(biāo) | - |
button | 自定義輸入框尾部按鈕 | - |
error-message v3.2.5
|
自定義底部錯誤提示文案 | { message: string } |
extra | 自定義輸入框最右側(cè)的額外內(nèi)容 | - |
組件提供了下列 CSS 變量,可用于自定義樣式,使用方法請參考 ConfigProvider 組件。
名稱 | 默認(rèn)值 | 描述 |
---|---|---|
--van-field-label-width | 6.2em | - |
--van-field-label-color | var(--van-text-color) | - |
--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-text-color-3) | - |
--van-field-placeholder-text-color | var(--van-text-color-3) | - |
--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-font-size | 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-text-color-3) | - |
--van-field-required-mark-color | var(--van-red) | - |
HTML 原生的 ?type="number"
? 屬性在 iOS 和 Android 系統(tǒng)上都存在一定問題,比如 maxlength 屬性不生效、無法獲取到完整的輸入內(nèi)容等。因此設(shè)置 type 為 ?number
? 時,F(xiàn)ield 不會使用原生的 ?type="number"
? 屬性,而是用現(xiàn)代瀏覽器支持的 inputmode 屬性來控制輸入鍵盤的類型。
Field 組件內(nèi)部會將傳入的 v-model 格式化為 string 類型,便于組件內(nèi)部進(jìn)行處理。
如果你希望在 v-model 上綁定 number 類型,可以使用 Vue 提供的 .number 修飾符。
<van-field v-model.number="value" type="tel" />
清除按鈕監(jiān)聽是的移動端 Touch 事件,參見桌面端適配。
更多建議: