用戶可以在文本框內(nèi)輸入或編輯文字。
通過以下方式來全局注冊(cè)組件,更多注冊(cè)方式請(qǐng)參考組件注冊(cè)。
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="請(qǐng)輸入用戶名" />
</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="文本" />
<!-- 輸入手機(jī)號(hào),調(diào)起手機(jī)號(hào)鍵盤 -->
<van-field v-model="tel" type="tel" label="手機(jī)號(hào)" />
<!-- 允許輸入正整數(shù),調(diào)起純數(shù)字鍵盤 -->
<van-field v-model="digit" type="digit" label="整數(shù)" />
<!-- 允許輸入數(shù)字,調(diào)起帶符號(hà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
? 屬性表示這是一個(gè)必填項(xiàng),可以配合 ?error
? 或 ?error-message
? 屬性顯示對(duì)應(yīng)的錯(cuò)誤提示。
<van-cell-group inset>
<van-field
v-model="username"
error
required
label="用戶名"
placeholder="請(qǐng)輸入用戶名"
/>
<van-field
v-model="phone"
required
label="手機(jī)號(hào)"
placeholder="請(qǐng)輸入手機(jī)號(hào)"
error-message="手機(jī)號(hào)格式錯(cuò)誤"
/>
</van-cell-group>
通過 button 插槽可以在輸入框尾部插入按鈕。
<van-cell-group inset>
<van-field
v-model="sms"
center
clearable
label="短信驗(yàn)證碼"
placeholder="請(qǐng)輸入短信驗(yàn)證碼"
>
<template #button>
<van-button size="small" type="primary">發(fā)送驗(yàn)證碼</van-button>
</template>
</van-field>
</van-cell-group>
通過 ?formatter
? 屬性可以對(duì)輸入的內(nèi)容進(jìn)行格式化,通過 ?format-trigger
? 屬性可以指定執(zhí)行格式化的時(shí)機(jī),默認(rèn)在輸入時(shí)進(jìn)行格式化。
<van-cell-group inset>
<van-field
v-model="value1"
label="文本"
:formatter="formatter"
placeholder="在輸入時(shí)執(zhí)行格式化"
/>
<van-field
v-model="value2"
label="文本"
:formatter="formatter"
format-trigger="onBlur"
placeholder="在失焦時(shí)執(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,
};
},
};
對(duì)于 textarea,可以通過 ?autosize
? 屬性設(shè)置高度自適應(yīng)。
<van-cell-group inset>
<van-field
v-model="message"
rows="1"
autosize
label="留言"
type="textarea"
placeholder="請(qǐng)輸入留言"
/>
</van-cell-group>
設(shè)置 ?maxlength
? 和 ?show-word-limit
? 屬性后會(huì)在底部顯示字?jǐn)?shù)統(tǒng)計(jì)。
<van-cell-group inset>
<van-field
v-model="message"
rows="2"
autosize
label="留言"
type="textarea"
maxlength="50"
placeholder="請(qǐng)輸入留言"
show-word-limit
/>
</van-cell-group>
通過 ?input-align
? 屬性可以設(shè)置輸入框內(nèi)容的對(duì)齊方式,可選值為 ?center
?、?right
?。
<van-cell-group inset>
<van-field
v-model="value"
label="文本"
placeholder="輸入框內(nèi)容右對(duì)齊"
input-align="right"
/>
</van-cell-group>
通過 ?label-align
? 屬性可以設(shè)置輸入框文本的位置,可選值為 ?center
?、?right
?、?top
?。
<van-cell-group inset>
<van-field
v-model="value"
label="手機(jī)號(hào)"
placeholder="請(qǐng)輸入手機(jī)號(hào)"
label-align="top"
/>
</van-cell-group>
參數(shù) | 說明 | 類型 | 默認(rèn)值 |
---|---|---|---|
v-model | 當(dāng)前輸入的值 | number | string | - |
label | 輸入框左側(cè)文本 | string | - |
name | 名稱,作為提交表單時(shí)的標(biāo)識(shí)符 | string | - |
id v3.2.2
|
輸入框 id,同時(shí)會(huì)設(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 后面添加冒號(hào) | boolean | false
|
required | 是否顯示表單必填星號(hào) | boolean | false
|
center | 是否使內(nèi)容垂直居中 | boolean | false
|
clearable | 是否啟用清除圖標(biāo),點(diǎn)擊清除圖標(biāo)后會(huì)清空輸入框 | boolean | false
|
clear-icon v3.0.12
|
清除圖標(biāo)名稱或圖片鏈接,等同于 Icon 組件的 name 屬性 | string | clear
|
clear-trigger | 顯示清除圖標(biāo)的時(shí)機(jī),always 表示輸入框不為空時(shí)展示,
focus 表示輸入框聚焦且不為空時(shí)展示 |
FieldClearTrigger | focus
|
clickable | 是否開啟點(diǎn)擊反饋 | boolean | false
|
is-link | 是否展示右側(cè)箭頭并開啟點(diǎn)擊反饋 | boolean | false
|
autofocus | 是否自動(dòng)聚焦,iOS 系統(tǒng)不支持該屬性 | boolean | false
|
show-word-limit | 是否顯示字?jǐn)?shù)統(tǒng)計(jì),需要設(shè)置 maxlength 屬性 |
boolean | false
|
error | 是否將輸入內(nèi)容標(biāo)紅 | boolean | false
|
error-message | 底部錯(cuò)誤提示文案,為空時(shí)不展示 | string | - |
error-message-align | 錯(cuò)誤提示文案對(duì)齊方式,可選值為 center right
|
FieldTextAlign | left
|
formatter | 輸入內(nèi)容格式化函數(shù) | (val: string) => string | - |
format-trigger | 格式化函數(shù)觸發(fā)的時(shí)機(jī),可選值為 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è)文本對(duì)齊方式,可選值為 center right top
|
FieldTextAlign | left
|
input-align | 輸入框?qū)R方式,可選值為 center right
|
FieldTextAlign | left
|
autosize | 是否自適應(yīng)內(nèi)容高度,只對(duì) textarea 有效,
可傳入對(duì)象,如 { 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 | 表單校驗(yàn)規(guī)則,詳見 Form 組件 | FieldRule[] | - |
autocomplete v3.0.3
|
HTML 原生屬性,用于控制自動(dòng)完成功能,詳見 MDN - autocomplete | string | - |
enterkeyhint v3.4.8
|
HTML 原生屬性,用于控制回車鍵樣式,此 API 僅在部分瀏覽器支持,詳見 MDN - enterkeyhint
|
string | - |
事件 | 說明 | 回調(diào)參數(shù) |
---|---|---|
update:model-value | 輸入框內(nèi)容變化時(shí)觸發(fā) | value: string (當(dāng)前輸入的值) |
focus | 輸入框獲得焦點(diǎn)時(shí)觸發(fā) | event: Event |
blur | 輸入框失去焦點(diǎn)時(shí)觸發(fā) | event: Event |
clear | 點(diǎn)擊清除按鈕時(shí)觸發(fā) | event: MouseEvent |
click | 點(diǎn)擊組件時(shí)觸發(fā) | event: MouseEvent |
click-input | 點(diǎn)擊輸入?yún)^(qū)域時(shí)觸發(fā) | event: MouseEvent |
click-left-icon | 點(diǎn)擊左側(cè)圖標(biāo)時(shí)觸發(fā) | event: MouseEvent |
click-right-icon | 點(diǎn)擊右側(cè)圖標(biāo)時(shí)觸發(fā) | event: MouseEvent |
start-validate v3.5.1
|
開始表單校驗(yàn)時(shí)觸發(fā) | - |
end-validate v3.5.1
|
結(jié)束表單校驗(yàn)時(shí)觸發(fā) | { status: string, message: string } |
通過 ref 可以獲取到 Field 實(shí)例并調(diào)用實(shí)例方法,詳見組件實(shí)例方法。
方法名 | 說明 | 參數(shù) | 返回值 |
---|---|---|---|
focus | 獲取輸入框焦點(diǎn) | - | - |
blur | 取消輸入框焦點(diǎn) | - | - |
組件導(dǎo)出以下類型定義:
import type {
FieldType,
FieldRule,
FieldProps,
FieldInstance,
FieldTextAlign,
FieldRuleMessage,
FieldClearTrigger,
FieldFormatTrigger,
FieldRuleValidator,
FiledRuleFormatter,
FieldValidateError,
FieldAutosizeConfig,
FieldValidateTrigger,
FieldValidationStatus,
} from 'vant';
?FieldInstance
? 是組件實(shí)例的類型,用法如下:
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
|
自定義底部錯(cuò)誤提示文案 | { message: string } |
extra | 自定義輸入框最右側(cè)的額外內(nèi)容 | - |
組件提供了下列 CSS 變量,可用于自定義樣式,使用方法請(qǐng)參考 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
? 時(shí),F(xiàn)ield 不會(huì)使用原生的 ?type="number"
? 屬性,而是用現(xiàn)代瀏覽器支持的 inputmode 屬性來控制輸入鍵盤的類型。
Field 組件內(nèi)部會(huì)將傳入的 v-model 格式化為 string 類型,便于組件內(nèi)部進(jìn)行處理。
如果你希望在 v-model 上綁定 number 類型,可以使用 Vue 提供的 .number 修飾符。
<van-field v-model.number="value" type="tel" />
清除按鈕監(jiān)聽是的移動(dòng)端 Touch 事件,參見桌面端適配。
更多建議: