ไทม์ไลน์ทรัพยากรและคอลัมน์ทรัพยากรของ FullCalendar อยู่ในรุ่น Premium แอปเชิงพาณิชย์จึงต้องใช้ license key ที่ต้องซื้อ หน้าสัญญาอนุญาตของ FullCalendar ระบุทางเลือกที่ใช้ได้ฟรีไว้ สำหรับแอปที่เป็น AGPL ทั้งหมด และสำหรับองค์กรไม่แสวงหากำไรที่จดทะเบียนแล้ว ส่วน Scheduler ของ Needless UI มีทั้งสองอย่างภายใต้สัญญาอนุญาต MIT พร้อมกิจกรรมที่เกิดซ้ำและไฟล์ iCalendar คู่มือนี้จะพาย้ายแอป Angular จากตัวหนึ่งไปอีกตัว ทั้งสิ่งที่ย้ายมาได้เลย สิ่งที่ย้ายมาไม่ได้ และข้อมูลที่ต้องแปลง

คู่มือนี้ใช้ชื่อตาม FullCalendar 7 และใส่ชื่อในเวอร์ชัน 6 ไว้ในวงเล็บเหลี่ยมเมื่อชื่อต่างกัน ตัวเชื่อมต่อ Angular ของ FullCalendar รองรับ Angular 16 ถึง 22 ส่วน Needless UI ต้องใช้ Angular 22

สิ่งที่คุณจะได้

FullCalendar และ Scheduler ของ Needless UI
ฟีเจอร์FullCalendarNeedless UI
ไทม์ไลน์ทรัพยากรที่มีแถวสำหรับแต่ละห้องหรือแต่ละคนPremiumมี แสดงได้ทั้งหนึ่งวัน หนึ่งสัปดาห์ หรือหนึ่งเดือน
ทรัพยากรเป็นคอลัมน์ในมุมมองวันและสัปดาห์Premiumมี
มุมมองเดือน สัปดาห์ และวันฟรีมี
ลากเพื่อย้ายและปรับขนาดฟรี แต่การลากไปยังทรัพยากรอื่นต้องใช้ Premiumมี และลากไปยังทรัพยากรอื่นได้ด้วย ปรับขนาดได้จากปลาย แต่ปรับจากจุดเริ่มต้นไม่ได้
เลือกช่วงเวลาเพื่อสร้างกิจกรรมฟรีมี ใช้ได้ทั้งตัวชี้ การกดค้าง และคีย์บอร์ด
กฎต่าง ๆ เช่น ห้ามเวลาซ้อนกันฟรี ผ่านตัวเลือกเรื่องการซ้อนทับและข้อจำกัดมี ผ่านฟังก์ชัน allow ฟังก์ชันเดียว ซึ่งจะถูกถามก่อนทุกการเปลี่ยนแปลง
ย้ายและปรับขนาดกิจกรรมด้วยคีย์บอร์ดไม่มีในเอกสารด้านการเข้าถึง ซึ่งพูดถึงป้ายกำกับ ARIA และการโฟกัสด้วย Tabมี และประกาศให้โปรแกรมอ่านหน้าจอทราบ
กิจกรรมที่เกิดซ้ำฟรี โดยใช้ปลั๊กอินและไลบรารี rruleมีในตัว ใช้กฎตาม RFC 5545 ยกเว้น EXRULE RDATE และกฎรายชั่วโมง
iCalendar (.ics)ฟรี อ่านฟีดได้อ่านและเขียนไฟล์ .ics ได้
มุมมองรายการและมุมมองปีฟรีมีกำหนดการของวันข้างหน้า แต่ไม่มีมุมมองปี
เขตเวลาฟรี ทั้งเวลาท้องถิ่น UTC และเขตเวลาตามชื่อไม่มี แสดงเวลาตามที่ได้รับมาโดยไม่แปลงเขตเวลา
ทรัพยากรแบบจัดกลุ่ม ซ้อนกัน หรือหลายคอลัมน์Premiumไม่มี มีคอลัมน์เดียวที่วาดด้วยเทมเพลตของคุณ
การลากและวางจากภายนอก และกิจกรรมพื้นหลังฟรีไม่มี
การสั่งพิมพ์ และการเรนเดอร์แบบ virtualPremiumไม่มี
เฟรมเวิร์กAngular 16 ถึง 22, React, Vue, JavaScript ธรรมดา และอื่น ๆAngular 22 และ React 19

อะไรตรงกับอะไร

ตัวเลือกของ FullCalendar และสิ่งที่ใช้แทนใน Needless UI
FullCalendarScheduler ของ Needless UI
<full-calendar [options]> plugins และ schedulerLicenseKey<nui-scheduler> ที่มี input สำหรับทุกตัวเลือก ไม่มีปลั๊กอินและไม่ต้องใช้ key
initialView: 'resourceTimelineDay'view="timeline" และ timelineSpan สำหรับหนึ่งสัปดาห์หรือหนึ่งเดือน
initialView: 'timeGridWeek'view="week" โดย [(view)] ผูกได้สองทาง
resources และ events[resources] และ [events]
resourceId และ extendedPropsresource และ data
editable และ selectableeditable และ selectable
select(slotSelect) ส่ง { start, end, allDay, resource }
eventDrop และ eventResize(eventChange) โดยจะไม่มีอะไรขยับจนกว่าคุณจะอัปเดต events
eventClick(eventClick)
eventOverlap selectOverlap และ eventAllow[allow] ฟังก์ชันเดียวสำหรับการย้าย การปรับขนาด และการเลือก
slotDuration และ snapDurationslotMinutes และ snapMinutes หน่วยเป็นนาที
slotMinTime slotMaxTime และ scrollTimedayStart dayEnd และ scrollHour หน่วยเป็นชั่วโมง
businessHours[businessHours] โดยวันในสัปดาห์เริ่มจาก 1 (วันจันทร์) ถึง 7
datesSet(rangeChange)
eventContent และ resourceCellContent [resourceLabelContent]เทมเพลต nuiSchedulerEvent และ nuiSchedulerResource
locale และ firstDaylocale (แท็ก BCP 47 ใดก็ได้) firstDay ตั้งแต่ 1 ถึง 7 และ labels สำหรับข้อความของ Scheduler

ไทม์ไลน์จองห้องด้วยทั้งสองไลบรารี

ห้องคือทรัพยากร และการจองคือกิจกรรม ผู้ใช้ลากผ่านแถวของห้องเพื่อจอง และลากการจองเพื่อย้าย โดยแต่ละห้องรับการจองได้ครั้งละหนึ่งรายการ เมื่อใช้ FullCalendar 7 กับไทม์ไลน์ทรัพยากรรุ่น Premium จะเขียนได้ดังนี้

ส่วนเมื่อใช้ Scheduler ของ Needless UI จะเขียนได้ดังนี้

มีสองเรื่องที่ทำงานต่างกัน เรื่องแรก FullCalendar ย้ายการจองเอง แล้วแอปจึงคัดลอกการเปลี่ยนแปลงตามไป ส่วน Scheduler ของ Needless UI เพียงรายงานการเปลี่ยนแปลง และการอัปเดต events คือสิ่งที่ทำให้การเปลี่ยนแปลงนั้นคงอยู่ ข้อมูลของคุณจึงเป็นแหล่งข้อมูลจริงเพียงแหล่งเดียว เรื่องที่สอง allow เป็นโค้ดธรรมดาที่ถูกถามก่อนทุกการเปลี่ยนแปลงจากตัวชี้หรือคีย์บอร์ด คุณจึงทดสอบกฎนั้นได้เอง คู่มือสร้างปฏิทินจองห้องประชุมจะพาสร้างแอปนี้ทีละขั้นตอน

การแปลงข้อมูล

ข้อมูลของ FullCalendar และรูปแบบที่ Scheduler ต้องการ
FullCalendarNeedless UI
ค่า end ของกิจกรรมทั้งวันคือวันถัดจากกิจกรรมค่า end ของกิจกรรมทั้งวันคือวันสุดท้ายของกิจกรรม จึงต้องลบออกหนึ่งวัน
เวลาอาจลงท้ายด้วย Z หรือ offset เช่น +02:00เวลาตามนาฬิกาที่ไม่มี offset เช่น 2026-11-02T09:30
วันในสัปดาห์เริ่มจาก 0 (วันอาทิตย์) ถึง 6 ใน businessHours และ firstDayวันในสัปดาห์เริ่มจาก 1 (วันจันทร์) ถึง 7 (วันอาทิตย์)
ระยะเวลาเป็นสตริง เช่น '00:30'ตัวเลขที่เป็นนาทีหรือชั่วโมง
ทรัพยากรเรียงตาม id แล้วจึงตามชื่อทรัพยากรเรียงตามลำดับในอาร์เรย์
rrule ที่เป็นออบเจ็กต์ และ exruleสตริงตาม RFC 5545 เช่น FREQ=WEEKLY;BYDAY=MO,FR และ exdate
เขตเวลา เช่น America/New_Yorkแปลงเวลาก่อน ส่วน nuiSchedulerFromIcs(text, { timeZone }) จะแปลงไฟล์ .ics ให้ระหว่างอ่าน

หากต้องการสิ่งที่ยังไม่มี

หากแอปของคุณต้องพึ่งเขตเวลา ทรัพยากรแบบจัดกลุ่ม การลากและวางจากภายนอก หรือการสั่งพิมพ์ Scheduler ยังใช้แทน FullCalendar ไม่ได้ในตอนนี้ เปิด issue เพื่อบอกสิ่งที่คุณต้องการ ส่วนเรื่องอื่นทั้งหมด หน้าของ Scheduler มีทุก input output และตัวอย่าง