Vant DatetimePicker 時(shí)間選擇

2022-05-31 11:57 更新

介紹

時(shí)間選擇器,支持日期、年月、時(shí)分等維度,通常與 彈出層 組件配合使用

引入

import Vue from 'vue';
import { DatetimePicker } from 'vant';

Vue.use(DatetimePicker);

代碼演示

選擇完整時(shí)間

<van-datetime-picker
  v-model="currentDate"
  type="datetime"
  :min-date="minDate"
  :max-date="maxDate"
/>
export default {
  data() {
    return {
      minDate: new Date(2020, 0, 1),
      maxDate: new Date(2025, 10, 1),
      currentDate: new Date()
    };
  }
};

選擇日期(年月日)

<van-datetime-picker
  v-model="currentDate"
  type="date"
  :min-date="minDate"
  :max-date="maxDate"
/>
export default {
  data() {
    return {
      minDate: new Date(2020, 0, 1),
      maxDate: new Date(2025, 10, 1),
      currentDate: new Date()
    };
  }
};

選擇日期(年月)

通過(guò)傳入formatter函數(shù),可以對(duì)選項(xiàng)文字進(jìn)行格式化處理

<van-datetime-picker
  v-model="currentDate"
  type="year-month"
  :min-date="minDate"
  :max-date="maxDate"
  :formatter="formatter"
/>
export default {
  data() {
    return {
      minDate: new Date(2020, 0, 1),
      maxDate: new Date(2025, 10, 1),
      currentDate: new Date()
    };
  },

  methods: {
    formatter(type, val) {
      if (type === 'year') {
        return `${val}年`;
      } else if (type === 'month') {
        return `${val}月`
      }
      return val;
    }
  }
}

選擇時(shí)間

<van-datetime-picker
  v-model="currentTime"
  type="time"
  :min-hour="10"
  :max-hour="20"
/>
export default {
  data() {
    return {
      currentTime: '12:00'
    };
  }
};

選項(xiàng)過(guò)濾器

通過(guò)傳入filter函數(shù),可以對(duì)選項(xiàng)數(shù)組進(jìn)行過(guò)濾,實(shí)現(xiàn)自定義時(shí)間間隔

<van-datetime-picker
  v-model="currentTime"
  type="time"
  :filter="filter"
/>
export default {
  data() {
    return {
      currentTime: '12:00'
    };
  },

  methods: {
    filter(type, options) {
      if (type === 'minute') {
        return options.filter(option => option % 5 === 0);
      }

      return options;
    }
  }
};

API

Props

參數(shù)說(shuō)明類型默認(rèn)值
type類型,可選值為 date
time year-month
stringdatetime
title頂部欄標(biāo)題string''
confirm-button-text確認(rèn)按鈕文字string確認(rèn)
cancel-button-text取消按鈕文字string取消
show-toolbar是否顯示頂部欄booleantrue
loading是否顯示加載狀態(tài)booleanfalse
filter選項(xiàng)過(guò)濾函數(shù)(type, vals) => vals-
formatter選項(xiàng)格式化函數(shù)(type, val) => val-
item-height選項(xiàng)高度number | string44
visible-item-count可見(jiàn)的選項(xiàng)個(gè)數(shù)number | string5
swipe-duration v2.2.13快速滑動(dòng)時(shí)慣性滾動(dòng)的時(shí)長(zhǎng),單位msnumber | string1000

DatePicker Props

當(dāng)時(shí)間選擇器類型為 date 或 datetime 時(shí),支持以下 props

參數(shù)說(shuō)明類型默認(rèn)值
min-date可選的最小時(shí)間,精確到分鐘Date十年前
max-date可選的最大時(shí)間,精確到分鐘Date十年后

TimePicker Props

當(dāng)時(shí)間選擇器類型為 time 時(shí),支持以下 props

參數(shù)說(shuō)明類型默認(rèn)值
min-hour可選的最小小時(shí)number | string0
max-hour可選的最大小時(shí)number | string23
min-minute可選的最小分鐘number | string0
max-minute可選的最大分鐘number | string59

Events

事件名說(shuō)明回調(diào)參數(shù)
change當(dāng)值變化時(shí)觸發(fā)的事件picker: Picker 實(shí)例
confirm點(diǎn)擊完成按鈕時(shí)觸發(fā)的事件value: 當(dāng)前選中的時(shí)間
cancel點(diǎn)擊取消按鈕時(shí)觸發(fā)的事件-

方法

通過(guò) ref 可以獲取到 DatetimePicker 實(shí)例并調(diào)用實(shí)例方法,詳見(jiàn) 組件實(shí)例方法

方法名說(shuō)明參數(shù)返回值
getPicker v2.4.0獲取 Picker 實(shí)例,用于調(diào)用 Picker 的實(shí)例方法--

常見(jiàn)問(wèn)題

設(shè)置 min-date 或 max-date 后出現(xiàn)頁(yè)面卡死的情況?

請(qǐng)注意不要在模板中直接使用類似min-date="new Date()"的寫法,這樣會(huì)導(dǎo)致每次渲染組件時(shí)傳入一個(gè)新的 Date 對(duì)象,而傳入新的數(shù)據(jù)會(huì)觸發(fā)下一次渲染,從而陷入死循環(huán)。

正確的做法是將min-date作為一個(gè)數(shù)據(jù)定義在data函數(shù)中。

在 iOS 系統(tǒng)上初始化組件失?。?/h3>

如果你遇到了在 iOS 上無(wú)法渲染組件的問(wèn)題,請(qǐng)確認(rèn)在創(chuàng)建 Date 對(duì)象時(shí)沒(méi)有使用new Date('2020-01-01')這樣的寫法,iOS 不支持以中劃線分隔的日期格式,正確寫法是new Date('2020/01/01')。

對(duì)此問(wèn)題的詳細(xì)解釋:stackoverflow。

在桌面端無(wú)法操作組件?

參見(jiàn)在桌面端使用。

是否有年份或月份選擇器?

如果僅需要選擇年份或者月份,建議直接使用 Picker 組件。


實(shí)例演示

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)