摘要:改進原控件無法切換語言的,支持和。日歷面板增加一個位置選項,允許讓面板右對齊,只需要即可。原事件只有在時才生效,現改為一直有效,這樣當用戶點擊日歷面板上的日期后就可以觸發該事件。
我是剛學Vue的菜鳥,在使用過程中需要用到日歷控件,由于項目中原來是用jQuery寫的,因此用了bootstarp的日歷控件,但是配合Vue實在有點蛋疼,不夠優雅……
于是網上搜了好久找到了Vue2-Calendar,不用說,挺好用的,但是同時也發現這個組件有些問題,有些功能挺不符合我們的要求,于是著手改了一版
效果圖
HTML代碼:
1 <calendar v-model="value" show-date-only :disabled-days-of-week="disabled" :format="format" :clear-button="clear" :placeholder="placeholder" :lang="lang" :position="position" :on-day-click="dayClick"> 2 calendar>View Code
JS代碼:
1 var app = new Vue({ 2 el: "#app", 3 data: function() { 4 return { 5 disabled: [], //禁用的日期 6 value: new Date(), //值 7 format: "yyyy-MM-dd", //文本框中顯示的日期格式 8 clear: false, //是否在文本框右側顯示清除按鈕(X) 9 placeholder: "日期", //水印 10 position: "left", //日期面板位置,默認null和left 居左,right則靠右 11 lang: "" //語言,默認中文,可選值:zh-CN、en 12 }; 13 }, 14 methods: { 15 //鼠標點擊日歷面板上的日期時的事件, 16 //傳遞的兩個參數均是同一個值,只是類型不同,隨便用哪個看個人需要 17 //date 是 Date 類型 18 //dateStr 是 String 類型 19 dayClick: function(date, dateStr) { 20 console.log(date); 21 console.log(dateStr); 22 console.log(this.value); 23 } 24 }, 25 components: { 26 calendar: Calendar 27 } 28 });View Code
HTML代碼:
1 <calendar v-model="value" show-date-only :disabled-days-of-week="disabled" :format="format" :clear-button="clear" :placeholder="placeholder" :lang="lang" :position="position" :on-day-click="dayClick" :pane="2"> 2 calendar>View Code
JS代碼:
1 var app = new Vue({ 2 el: "#app", 3 data: function() { 4 return { 5 disabled: [], //禁用的日期 6 value: new Date(), //值 7 format: "yyyy-MM-dd", //文本框中顯示的日期格式 8 clear: false, //是否在文本框右側顯示清除按鈕(X) 9 placeholder: "日期", //水印 10 position: "left", //日期面板位置,默認null和left 居左,right則靠右 11 lang: "" //語言,默認中文,可選值:zh-CN、en 12 }; 13 }, 14 methods: { 15 //鼠標點擊日歷面板上的日期時的事件, 16 //傳遞的兩個參數均是同一個值,只是類型不同,隨便用哪個看個人需要 17 //date 是 Date 類型 18 //dateStr 是 String 類型 19 dayClick: function(date, dateStr) { 20 console.log(date); 21 console.log(dateStr); 22 console.log(this.value); 23 } 24 }, 25 components: { 26 calendar: Calendar 27 } 28 });View Code
說明:當選擇了開始時間后,結束時間選擇時會顯示哪些日期可選,并且顯示已經選擇的開始時間
HTML代碼:
1 <calendar v-model="value" show-date-only :disabled-days-of-week="disabled" :format="format" :clear-button="clear" :placeholder="起始時間" :lang="lang" :position="position" :on-day-click="dayClick" :pane="1" :range-bus="getBus" :range-status="1">calendar> 2 <calendar v-model="value2" show-date-only :disabled-days-of-week="disabled" :format="format" :clear-button="clear" :placeholder="結束時間" :lang="lang" :position="position" :on-day-click="dayClick" :pane="1" :range-bus="getBus" :range-status="2">calendar>View Code
JS代碼:
1 var app2 = new Vue({ 2 el: "#app2", 3 data: function() { 4 return { 5 disabled: [], 6 value: new Date(), 7 value2: new Date(), 8 format: "yyyy-MM-dd", 9 clear: false, 10 placeholder: "Start Date", 11 position: "left", 12 lang: "", 13 bus: new Vue() 14 }; 15 }, 16 methods: { 17 dayClick: function(date, dateStr) { 18 console.log(value= + this.value); 19 console.log(value2= + this.value2); 20 }, 21 getBus: function() { 22 return this.bus; 23 } 24 }, 25 components: { 26 calendar: Calendar 27 } 28 });View Code
$ npm install vue2-slot-calendar
// js file import vue2-slot-calendar/lib/calendar.min.css; import calendar from vue2-slot-calendar/lib/calendar; // vue file // in ES6 modules import Calendar from vue2-slot-calendar; // in CommonJS const Calendar = require(vue2-slot-calendar); // in Global variable const VueCalendar = Calendar;
系統提供window.VueCalendarLang 勾子函數來讓用戶自定義語言,
window.VueCalendarLang=function(lang){ return {}; //對象必須是下面JSON格式 };
上面勾子函數返回的必須是下面格式的JSON對象。
下面的腳本在 /src/lang/zh-CN.js 中有
{ daysOfWeek: ["日", "一", "二", "三", "四", "五", "六"], limit: "超過限制 (最多{{limit}}項)", loading: "加載中...", minLength: "最小長度", months: [ "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一", "十二" ], notSelected: "未選擇", required: "必填項", search: "查找" }
# 安裝依賴 npm install # 運行開發服務器 localhost:4000 npm run dev # 編譯(壓縮JS和CSS等) npm run build # 單元測試 npm run unit # 運行所有測試 npm test
Name | Type | Default | Description |
---|---|---|---|
value | String |
組件輸入輸出的值,即 v-model 的值 | |
width | String |
200px | input文本框的寬度 |
format | String |
yyyy-MM-dd |
日期格式,可用值: d, dd, M, MM, MMM, MMMM, yyyy. |
disabled-days-of-week | Array |
每周有哪些天禁用,可用值0-6,多個值則用逗號隔開 | |
clear-button | Bollean |
false | 是否顯示清除按鈕,顯示清除按鈕時右側的日歷圖標不顯示,不顯示清除按鈕時則顯示日歷圖標 |
placeholder | String |
文本框中顯示的水印 | |
hasInput | Boolean |
true | 是否顯示文本框 |
pane | Number |
1 | 日歷面板數量,默認1,雙月日歷設為2即可,目前僅支持1和2 |
borderWidth | Number |
2 | 日歷面板邊框線寬度 |
onDayClick | Function |
點擊日期時的事件,已改為不受hasInput值的限制,總是觸發 | |
specialDays | Object |
特殊日期 | |
changePane | Function |
切換日歷面板時的事件, 暫時還沒研究這個,大多數情況下用不到,請參考 /src/modules/Docs.vue |
|
rangeBus | Function |
暫時不明白啥意思,請總是返回一個 new Vue() 就對了 | |
rangeStatus | Number |
0 | 日期范圍狀態,默認0表示不使用日期范圍,1表示雙日歷聯動的起始日期,2表示雙日歷聯動的結束日期 |
onDrawDate | Function |
繪制日期時的事件,可以讓用戶自定義日歷樣式 | |
showDateOnly | Boolean |
false | 是否只顯示日歷面板 |
transfer | Boolean |
false | 是否將日歷面板添加到 document.body中 |
elementId | String |
日歷ID | |
firstDayOfWeek | Number |
0 | 每周第1天,0表示星期天,1表示星期一,其它依次類推 |
props: { value: { type: [String, Date] }, format: { default: yyyy-MM-dd }, firstDayOfWeek: { // sunday default: 0 }, disabledDaysOfWeek: { type: Array, default () { return [] } }, width: { type: String, default: 200px }, clearButton: { type: Boolean, default: false }, inputClasses: { type: String, default: }, lang: { type: String, default: navigator.language }, placeholder: { type: String }, hasInput: { type: Boolean, default: true }, pane: { type: Number, default: 1 }, borderWidth: { type: Number, default: 2 }, onDayClick: { type: Function, default () {} }, changePane: { type: Function, default () {} }, specialDays: { type: Object, default () { return {} } }, rangeBus: { type: Function, default () { // return new Vue() } }, rangeStatus: { type: Number, default: 0 }, onDrawDate: { type: Function, default () {} }, maxDate: { type: String }, minDate: { type: String }, showDateOnly: { type: Boolean, default: false }, transfer: { type: Boolean, default: false }, elementId: [String] }
以下是我改過后的源碼:
https://github.com/alaxgit/Vue2-Calendar
如果你喜歡直接引用JS和CSS,不喜歡用webpack編譯啥的,可以直接下載編譯好的文件:
https://github.com/alaxgit/Vue2-Calendar/blob/master/lib/calendar.min.js
https://github.com/alaxgit/Vue2-Calendar/blob/master/lib/calendar.min.css
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/1015.html
摘要:中文官網英文官網組織發出一個問題之后,不要暫時的離開電腦,如果沒有把握先不要提問。珍惜每一次提問,感恩每一次反饋,每個人工作還是業余之外抽出的時間有限,充分準備好應有的資源之后再發問,有利于問題能夠高效質量地得到解決。 Vue.js資源分享 更多資源請Star:https://github.com/maidishike... 文章轉自:https://github.com/maid...
摘要:基于開發的輕量,高性能日歷組件占用內存小,性能好,樣式好看,可擴展性強原生開發,沒引入第三方庫上很多點擊彈出日歷選擇某個時間的組件,卻沒有找到單純展示日歷并且能點擊獲取時間的組件少部分日歷組件的占用內存過于大,對于日歷這樣簡單的功能來說 vue-calendar-component 基于 vue 2.0 開發的輕量,高性能日歷組件 占用內存小,性能好,樣式好看,可擴展性強 原生 js...
摘要:基于開發的輕量,高性能日歷組件占用內存小,性能好,樣式好看,可擴展性強原生開發,沒引入第三方庫上很多點擊彈出日歷選擇某個時間的組件,卻沒有找到單純展示日歷并且能點擊獲取時間的組件少部分日歷組件的占用內存過于大,對于日歷這樣簡單的功能來說 vue-calendar-component 基于 vue 2.0 開發的輕量,高性能日歷組件 占用內存小,性能好,樣式好看,可擴展性強 原生 js...
摘要:由出品的前端開源項目周報第三期來啦。我們的前端開源周報集合了一周來新收錄的優質的前端開發方面的開源項目,方便前端開發人員便捷的找到自己需要的項目工具等。 由OpenDigg?出品的前端開源項目周報第三期來啦。我們的前端開源周報集合了OpenDigg一周來新收錄的優質的前端開發方面的開源項目,方便前端開發人員便捷的找到自己需要的項目工具等。 Cost of modules 查看哪個依賴拖...
閱讀 730·2023-04-25 19:43
閱讀 3974·2021-11-30 14:52
閱讀 3801·2021-11-30 14:52
閱讀 3865·2021-11-29 11:00
閱讀 3796·2021-11-29 11:00
閱讀 3894·2021-11-29 11:00
閱讀 3571·2021-11-29 11:00
閱讀 6154·2021-11-29 11:00