Timeline tài nguyên và chế độ xem chia cột theo tài nguyên của FullCalendar thuộc bản Premium: ứng dụng thương mại cần một khóa giấy phép trả phí. Trang giấy phép của FullCalendar có liệt kê các trường hợp được dùng miễn phí: ứng dụng hoàn toàn theo AGPL và tổ chức phi lợi nhuận đã đăng ký. Bộ lập lịch của Needless UI có cả hai tính năng này theo giấy phép MIT, kèm sự kiện lặp lại và tệp iCalendar. Hướng dẫn này giúp bạn chuyển một ứng dụng Angular từ FullCalendar sang Needless UI: những gì mang theo được, những gì không, và dữ liệu cần chuyển đổi.

Hướng dẫn này dùng tên gọi của FullCalendar 7, và ghi tên của phiên bản 6 trong ngoặc vuông ở những chỗ hai phiên bản khác nhau. Gói tích hợp Angular của FullCalendar hỗ trợ Angular 16 đến 22; Needless UI cần Angular 22.

Bạn nhận được gì

FullCalendar và bộ lập lịch của Needless UI
Tính năngFullCalendarNeedless UI
Timeline tài nguyên: mỗi phòng hoặc mỗi người một dòngPremiumCó: một ngày, một tuần hoặc một tháng
Tài nguyên dạng cột trong chế độ xem ngày và tuầnPremiumCó
Chế độ xem tháng, tuần và ngàyMiễn phíCó
Kéo để di chuyển và đổi độ dàiMiễn phí; kéo sang tài nguyên khác thì cần PremiumCó, kể cả sang tài nguyên khác. Kéo điểm kết thúc để đổi độ dài; điểm bắt đầu thì không.
Chọn thời gian để tạo sự kiệnMiễn phíCó, bằng con trỏ, nhấn giữ hoặc bàn phím
Quy tắc như không cho trùng giờMiễn phí: tùy chọn overlap và constraintCó: một hàm allow, được hỏi trước mọi thay đổi
Di chuyển và đổi độ dài sự kiện bằng bàn phímKhông có trong tài liệu về khả năng tiếp cận của FullCalendar, vốn chỉ nói về nhãn ARIA và focus bằng TabCó, kèm thông báo cho trình đọc màn hình
Sự kiện lặp lạiMiễn phí, cần plugin và thư viện rruleTích hợp sẵn: quy tắc RFC 5545, trừ EXRULE, RDATE và quy tắc lặp theo giờ
iCalendar (.ics)Miễn phí: đọc nguồn cấp lịchĐọc và ghi tệp .ics
Chế độ xem danh sách và xem nămMiễn phíLịch biểu cho những ngày sắp tới; không có chế độ xem năm
Múi giờMiễn phí: giờ địa phương, UTC hoặc múi giờ có tênKhông: hiển thị đúng giờ nhận được
Tài nguyên theo nhóm, lồng nhau hoặc nhiều cộtPremiumKhông: một cột, do template của bạn vẽ
Kéo thả từ bên ngoài, sự kiện nềnMiễn phíKhông
In, render ảoPremiumKhông
FrameworkAngular 16 đến 22, React, Vue, JavaScript thuần và nhiều hơn nữaAngular 22 và React 19

Đối chiếu tùy chọn

Tùy chọn của FullCalendar và phần tương ứng trong Needless UI
FullCalendarBộ lập lịch Needless UI
<full-calendar [options]>, plugins, schedulerLicenseKey<nui-scheduler>, mỗi tùy chọn là một input; không có plugin và không cần khóa
initialView: 'resourceTimelineDay'view="timeline", thêm timelineSpan để xem một tuần hoặc một tháng
initialView: 'timeGridWeek'view="week"; [(view)] là liên kết hai chiều
resources, events[resources], [events]
resourceId, extendedPropsresource, data
editable, selectableeditable, selectable
select(slotSelect): { start, end, allDay, resource }
eventDrop, eventResize(eventChange): không có gì di chuyển cho đến khi bạn cập nhật events
eventClick(eventClick)
eventOverlap, selectOverlap, eventAllow[allow]: một hàm cho cả di chuyển, đổi độ dài và chọn thời gian
slotDuration, snapDurationslotMinutes, snapMinutes, tính bằng phút
slotMinTime, slotMaxTime, scrollTimedayStart, dayEnd, scrollHour, tính bằng giờ
businessHours[businessHours], với các ngày trong tuần từ 1 (thứ Hai) đến 7
datesSet(rangeChange)
eventContent, resourceCellContent [resourceLabelContent]Template nuiSchedulerEvent và nuiSchedulerResource
locale, firstDaylocale (mọi thẻ BCP 47), firstDay từ 1 đến 7, và labels cho câu chữ của nó

Timeline đặt phòng họp, viết theo cả hai cách

Phòng là tài nguyên, còn lượt đặt chỗ là sự kiện. Người dùng kéo qua một phòng để đặt phòng đó, kéo một lượt đặt chỗ để di chuyển nó, và mỗi phòng chỉ nhận một lượt đặt chỗ tại một thời điểm. Với FullCalendar 7 và timeline tài nguyên Premium của nó:

Với bộ lập lịch của Needless UI:

Có hai điểm hoạt động khác nhau. FullCalendar tự di chuyển lượt đặt chỗ, rồi ứng dụng chép lại thay đổi đó; bộ lập lịch của Needless UI chỉ báo lại thay đổi, và thay đổi chỉ được giữ khi bạn cập nhật events, nên dữ liệu của bạn luôn là nguồn duy nhất. Ngoài ra, allow chỉ là code thông thường, được hỏi trước mọi thay đổi dù đến từ con trỏ hay bàn phím, nên bạn tự kiểm thử được quy tắc này. Hướng dẫn lịch đặt phòng họp xây dựng ứng dụng này từng bước một.

Chuyển đổi dữ liệu

Dữ liệu của FullCalendar và định dạng mà bộ lập lịch cần
FullCalendarNeedless UI
end của sự kiện cả ngày là ngày sau khi sự kiện kết thúcend của sự kiện cả ngày là ngày cuối cùng của nó: hãy trừ đi một ngày
Thời gian có thể kết thúc bằng Z hoặc độ lệch múi giờ như +02:00Thời gian không kèm độ lệch múi giờ, chẳng hạn 2026-11-02T09:30
Ngày trong tuần từ 0 (Chủ nhật) đến 6, trong businessHours và firstDayNgày trong tuần từ 1 (thứ Hai) đến 7 (Chủ nhật)
Thời lượng ở dạng chuỗi, chẳng hạn '00:30'Dạng số: số phút hoặc số giờ
Tài nguyên được sắp xếp theo id, rồi theo tiêu đềTài nguyên giữ đúng thứ tự trong mảng
rrule dạng đối tượng, và exruleChuỗi RFC 5545, chẳng hạn FREQ=WEEKLY;BYDAY=MO,FR, và exdate
Múi giờ như America/New_YorkHãy chuyển đổi thời gian trước. nuiSchedulerFromIcs(text, { timeZone }) chuyển đổi tệp .ics ngay khi đọc.

Nếu bạn cần những gì còn thiếu

Nếu ứng dụng của bạn phụ thuộc vào múi giờ, tài nguyên theo nhóm, kéo thả từ bên ngoài hoặc tính năng in, bộ lập lịch chưa thể thay thế FullCalendar. Hãy mở một issue cho tính năng bạn cần. Với mọi thứ khác, trang của bộ lập lịch có đủ mọi input, output và ví dụ.