W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
日期選擇器,用于選擇年、月、日,通常與彈出層組件配合使用。
通過以下方式來全局注冊組件,更多注冊方式請參考組件注冊。
import { createApp } from 'vue';
import { DatePicker } from 'vant';
const app = createApp();
app.use(DatePicker);
通過 ?v-model
? 綁定當前選中的日期,通過 ?min-date
? 和 ?max-date
? 屬性來設(shè)定可選的時間范圍。
<van-date-picker
v-model="currentDate"
title="選擇日期"
:min-date="minDate"
:max-date="maxDate"
/>
import { ref } from 'vue';
export default {
setup() {
const currentDate = ref(['2021', '01', '01']);
return {
minDate: new Date(2020, 0, 1),
maxDate: new Date(2025, 5, 1),
currentDate,
};
},
};
通過 ?columns-type
? 屬性可以控制選項的類型,支持以任意順序?qū)?nbsp;?year
?、?month
? 和 ?day
? 進行排列組合。
比如:
['year']
? 來單獨選擇年份。['month']
? 來單獨選擇月份。['year', 'month']
? 來選擇年份和月份。['month', 'day']
? 來選擇月份和日期。<van-date-picker
v-model="currentDate"
title="選擇年月"
:min-date="minDate"
:max-date="maxDate"
:columns-type="columnsType"
/>
import { ref } from 'vue';
export default {
setup() {
const currentDate = ref(['2021', '01']);
const columnsType = ['year', 'month'];
return {
minDate: new Date(2020, 0, 1),
maxDate: new Date(2025, 5, 1),
currentDate,
columnsType,
};
},
};
通過傳入 ?formatter
? 函數(shù),可以對選項文字進行格式化處理。
<van-date-picker
v-model="currentDate"
title="選擇年月"
:min-date="minDate"
:max-date="maxDate"
:formatter="formatter"
:columns-type="columnsType"
/>
import { ref } from 'vue';
export default {
setup() {
const currentDate = ref(['2021', '01']);
const columnsType = ['year', 'month'];
const formatter = (type, option) => {
if (type === 'year') {
option.text += '年';
}
if (type === 'month') {
option.text += '月';
}
return option;
};
return {
minDate: new Date(2020, 0, 1),
maxDate: new Date(2025, 5, 1),
formatter,
currentDate,
columnsType,
};
},
};
通過傳入 ?filter
? 函數(shù),可以對選項數(shù)組進行過濾,實現(xiàn)自定義選項間隔。
<van-date-picker
v-model="currentDate"
title="選擇年月"
:filter="filter"
:min-date="minDate"
:max-date="maxDate"
:columns-type="columnsType"
/>
import { ref } from 'vue';
export default {
setup() {
const currentDate = ref(['2021', '01']);
const columnsType = ['year', 'month'];
const filter = (type, options) => {
if (type === 'month') {
return options.filter((option) => Number(option.value) % 6 === 0);
}
return options;
};
return {
filter,
minDate: new Date(2020, 0, 1),
maxDate: new Date(2025, 5, 1),
currentTime,
columnsType,
};
},
};
參數(shù) | 說明 | 類型 | 默認值 |
---|---|---|---|
v-model | 當前選中的日期 | string[] | []
|
columns-type | 選項類型,由 year 、month 和 day 組成的數(shù)組 |
string[] | ['year', 'month', 'day']
|
min-date | 可選的最小時間,精確到日 | Date | 十年前 |
max-date | 可選的最大時間,精確到日 | Date | 十年后 |
title | 頂部欄標題 | string | ''
|
confirm-button-text | 確認按鈕文字 | string | 確認
|
cancel-button-text | 取消按鈕文字 | string | 取消
|
show-toolbar | 是否顯示頂部欄 | boolean | true
|
loading | 是否顯示加載狀態(tài) | boolean | false
|
readonly | 是否為只讀狀態(tài),只讀狀態(tài)下無法切換選項 | boolean | false
|
filter | 選項過濾函數(shù) | (type: string, options: PickerOption[]) => PickerOption[] | - |
formatter | 選項格式化函數(shù) | (type: string, option: PickerOption) => PickerOption | - |
option-height | 選項高度,支持 px vw vh rem 單位,默認 px
|
number | string | 44
|
visible-option-num | 可見的選項個數(shù) | number | string | 6
|
swipe-duration | 快速滑動時慣性滾動的時長,單位 ms
|
number | string | 1000
|
事件名 | 說明 | 回調(diào)參數(shù) |
---|---|---|
confirm | 點擊完成按鈕時觸發(fā) | { selectedValues, selectedOptions } |
cancel | 點擊取消按鈕時觸發(fā) | { selectedValues, selectedOptions } |
change | 選項改變時觸發(fā) | { selectedValues, selectedOptions, columnIndex } |
名稱 | 說明 | 參數(shù) |
---|---|---|
toolbar | 自定義整個頂部欄的內(nèi)容 | - |
title | 自定義標題內(nèi)容 | - |
confirm | 自定義確認按鈕內(nèi)容 | - |
cancel | 自定義取消按鈕內(nèi)容 | - |
option | 自定義選項內(nèi)容 | option: PickerOption |
columns-top | 自定義選項上方內(nèi)容 | - |
columns-bottom | 自定義選項下方內(nèi)容 | - |
組件導(dǎo)出以下類型定義:
import type { DatePickerProps, DatePickerColumnType } from 'vant';
請注意不要在模板中直接使用類似 ?min-date="new Date()"
? 的寫法,這樣會導(dǎo)致每次渲染組件時傳入一個新的 Date 對象,而傳入新的數(shù)據(jù)會觸發(fā)下一次渲染,從而陷入死循環(huán)。
正確的做法是將 ?min-date
? 作為一個數(shù)據(jù)定義在 ?data
? 函數(shù)或 ?setup
? 中。
如果你遇到了在 iOS 上無法渲染組件的問題,請確認在創(chuàng)建 Date 對象時沒有使用 ?new Date('2020-01-01')
? 這樣的寫法,iOS 不支持以中劃線分隔的日期格式,正確寫法是 ?new Date('2020/01/01')
?。
對此問題的詳細解釋:stackoverflow。
參見桌面端適配。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: