用戶可以在文本框內(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 屬性定義不同類型的輸入框,默認值為 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>
通過 formatter 屬性可以對輸入的內(nèi)容進行格式化,通過 format-trigger 屬性可以指定執(zhí)行格式化的時機,默認在輸入時進行格式化。
<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,
};
},
};
對于 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 屬性后會在底部顯示字數(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>
參數(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 | - |
事件 | 說明 | 回調(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 | 取消輸入框焦點 | - | - |
名稱 | 說明 |
---|---|
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) | - |
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 事件,參見桌面端適配。
更多建議: