FullCalendar5.+在vue中一些有用的使用


最近想做一個類似飛書上日程管理的小demo,不願意重復造輪子(其實是水准不夠),選來選去選擇了FullCalendar.js庫。

雖然FullCalendar是一個jQuary的庫,但是其實它的4.0+已經支持了vue,並且功能上,fullCalendar支持月歷、周歷、日程、日程精細到時間等等,非常的全面。

如何使用可以參考這一篇,寫得很詳細,但是目前fullCalendar已經出到5.+了,所以一些接口字段也有變化:

https://www.cnblogs.com/czk1634798848/p/13386178.html

本文就是依據我demo的需求,對上文沒有提及的地方進行小小的補充~

需求一:header自定義

FullCalendar的header可以選擇在左中右如何排布按鈕和title的順序,也支持(僅支持)自定義按鈕,自定義按鈕也僅支持有限的三種風格。

但是現在應該比較少人使用默認的bootstrap風格和圖標了,那么如何自定義按鈕和文字等header元素呢?

首先,在想要放我們自己的文字的地方加入自定義按鈕

然后,在mount鈎子的回調里面,找到我們自定義按鈕,利用原生js,將它替換成我們想要的節點

最后,調整ui樣式。

mount這個生命周期鈎子,在5.+的版本里面,叫做eventDidMount,替換了之前版本的多個回調,需要注意一下。

上代碼:

 1 calendarOptions: {
 2         // 一些其它配置,省略
 3         // 。。。。。
 4         //header配置
 5         // 自定義按鈕(其實包含文字,自定義圖標等,通過自定義按鈕的接口實現)
 6         customButtons: {
 7           // 自定義整個頁面的標題
 8           calendarTitle: {
 9             theme: "true",
10             text: "",
11             click: function () {
12               alert("clicked the custom button!");
13             },
14           },
15           // 自定義一個設置圖標按鍵
16           setting: {
17             theme: "true",
18             text: "",
19             click: function () {
20               alert("clicked the custom button!");
21             },
22           },
23         },
24         headerToolbar: {
25           // 日歷頭部按鈕位置
26           left: "calendarTitle",
27           center: "prev title next",
28           right: "today dayGridWeek,dayGridMonth setting",
29         },
30         buttonText: {
31           today: "今天",
32           month: "月",
33           week: "周",
34         },
35         // 日歷生命周期鈎子,在這時對header進行div操作
36         eventDidMount: () => {
37           if (!this.$refs.myCalendar.$el.querySelector(".header-title")) {
38             let parentsDiv = this.$refs.myCalendar.$el.querySelector(
39               ".fc-toolbar-chunk"
40             );
41             let calendarDiv = this.$refs.myCalendar.$el.querySelector(
42               ".fc-calendarTitle-button"
43             );
44             // console.log(calendarDiv);
45             let titleEle = document.createElement("DIV");
46             titleEle.innerHTML = '<div class="header-title">日程</div>';
47             parentsDiv.insertBefore(titleEle, calendarDiv);
48             calendarDiv.style.display = 'none';
49           }
50           if (!this.$refs.myCalendar.$el.querySelector(".header-setting-btn")) {
51             let parentsDivs = this.$refs.myCalendar.$el.querySelectorAll(
52               ".fc-toolbar-chunk"
53             );
54             let parentsDiv = parentsDivs[parentsDivs.length - 1]
55             let settingBtnDiv = this.$refs.myCalendar.$el.querySelector(
56               ".fc-setting-button"
57             );
58             let settingEle = document.createElement("DIV");
59             settingEle.innerHTML = '<div class="header-setting-btn"></div>';
60             // console.log(settingEle);
61             parentsDiv.insertBefore(settingEle, settingBtnDiv);
62             settingBtnDiv.style.display = 'none';
63           }
64 
65         },

關於調整ui樣式,雖然FullCanlendar中也開放了一些接口如viewClassNames等,但是如果有比較嚴格的ui圖作為參考,僅僅利用它默認開放的classNames,不是很夠用,閱讀文檔又很頭痛,這里分享一種無腦覆蓋ui的方式,適合各種ui庫的個性化改造哦~

第一步 在src下添加styles文件夾,里面定義一個public.css或public.scss,作為全局的css文件;

第二步 在main.js中把這個public.css導入:

import '@/styles/public.scss'

第三步 打開瀏覽器的devtools,檢查想要修改的元素,找到class name;

第四步 在public.css里,直接寫樣式覆蓋掉原來的定義

就可以啦~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM