關(guān)于elementUI里日期選擇器禁用時(shí)間的一些小技巧

DatePicker日期選擇器算是日常開發(fā)中用得比較多的插件之一了,特別是做一些后臺(tái)管理系統(tǒng),選擇時(shí)間、日期也是特別的方便,相比于原生的input中的date,elementUI中的日期選擇器顯得更加的好看,暴露出的方法也更加的使用方便。下面我們一起來(lái)看一下它的其中一個(gè)方法,禁用日期disabledDate。

DatePicker 日期選擇器

其官網(wǎng)地址是:elementUI DatePicker 日期選擇器


PS:由于工作需要,并未使用elementUI較新的版本,而是使用了停止更新的1.4版本。


我們知道,常用的禁止日期方法已經(jīng)在第一個(gè)demo中展示,通過(guò)配置picker-options中的disabledDate屬性,而disabledDate通常是一個(gè)函數(shù),其有一個(gè)默認(rèn)的參數(shù),表示可供選擇的時(shí)間,還有一個(gè)為布爾類型的返回值,返回true表示該時(shí)間可用,反之為不可用。
(PS:文檔上并未明確指出該參數(shù)代表的是什么。其使用的參數(shù)名為time,本人通過(guò)log調(diào)試,感覺應(yīng)該是表示可供選擇的時(shí)間)。
官網(wǎng)給出的demo更多的是一些固定的時(shí)間,比如一天前,一周前等等,使用方法也十分簡(jiǎn)單。
只需要

//script部分

data() {
      return {
        value: '',
        pickerOptions: {
          disabledDate(time) {
            return time.getTime() < Date.now() - 8.64e7;
          }
        }
}
//template部分

 <el-date-picker
      v-model="value"
      type="date"
      placeholder="選擇日期"
      :picker-options="pickerOptions">
 </el-date-picker>

如上文所述,一個(gè)picker-options對(duì)象中,包含了一個(gè)keydisabledDatevalue為一個(gè)返回值為布爾值的函數(shù)。其中,函數(shù)有一個(gè)默認(rèn)參數(shù)為time。

為什么要多次強(qiáng)調(diào)這里有一個(gè)默認(rèn)參數(shù)呢,因?yàn)榭泳驮谶@里....想象一下這樣的場(chǎng)景
需要禁用的時(shí)間并非是基于今天的某個(gè)時(shí)間,這個(gè)時(shí)間是不固定的,并非是Date.now()。這里可以這樣處理,把時(shí)間變量放在data中,具體代碼如下:

//script部分

data() {
      return {
      value: '',
      date: '',
      pickerOptions: {} 
}

created () {
     this.pickerOptions = {
           disabledDate(time) {
              return time.getTime() < new Date(this.date).getTime();
           }
     }
}
//template部分

 <el-date-picker
      v-model="value"
      type="date"
      placeholder="選擇日期"
      :picker-options="pickerOptions">
 </el-date-picker>

當(dāng)然這是在知道時(shí)間變量this.date的情況下可以這樣做,如果這個(gè)時(shí)間變量并不是那么好找的時(shí)候呢?
我就遇到這樣一個(gè)場(chǎng)景,需要?jiǎng)討B(tài)渲染一些時(shí)間表單,但是具體表單的數(shù)量,名稱都不知道,是后端傳過(guò)來(lái)的數(shù)據(jù),這個(gè)時(shí)候就不能預(yù)先找到'this.date'了,因?yàn)檫Bthis.date本身,也是根據(jù)后端傳來(lái)的數(shù)據(jù)生成的。
這個(gè)時(shí)候,就需要傳參了,把我需要限制的時(shí)間傳遞到disabledDate這個(gè)函數(shù)中。
我們知道,這個(gè)函數(shù)有默認(rèn)的參數(shù)time,如果正常的傳參,會(huì)導(dǎo)致time丟失,那么應(yīng)該怎么處理呢,請(qǐng)看下面的代碼:

//script部分

data() {
      return {
      value: '',
      pickerOptions: {} 
}

created () {
     this.pickerOptions = function (date)  {
           return disabledDate(time) {
              return time.getTime() < new Date(date).getTime();
           }
     }
}
//template部分

 <el-date-picker
      v-model="value"
      type="date"
      placeholder="選擇日期"
      :picker-options="pickerOptions(DateParam)">
 </el-date-picker>

其實(shí)可以看出,就是做了一個(gè)閉包,將參數(shù)傳過(guò)去的同時(shí)不破壞disabledDate本身的傳參,這樣無(wú)論是參數(shù),還是time都拿到了。完美解決時(shí)間禁用問題。


寫在后面

當(dāng)然,這種閉包的思路并不是對(duì)于所有的elementUI控件有默認(rèn)值的方法都是生效的,之前有試過(guò)checkBox控件的change方法,貌似是行不通的。在網(wǎng)上查詢后發(fā)現(xiàn)是使用$event去表示默認(rèn)傳參,具體代碼如下:

<el-checkbox @change="handleChange($event, someParam)"></el-checkbox>

具體原理并未深究,有時(shí)間的話可以去研究一下...現(xiàn)在是能解決問題就OK了.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容