Mặc định
Progress indicator mặc định của Inertia là một lớp bọc nhẹ quanh thư viện NProgress. Bạn có thể tùy chỉnh thông qua propertyprogress của hàm createInertiaApp().
progress thành false.
Truy cập bằng code
Khi cần kiểm soát progress indicator bên ngoài request Inertia, ví dụ khi gửi request bằng Axios hoặc thư viện khác, bạn có thể dùng trực tiếp các phương thức progress của Inertia.hide() và reveal() phối hợp để tránh xung đột khi nhiều phần code cùng cần kiểm soát khả năng hiển thị progress. Mỗi lần gọi hide() sẽ tăng một bộ đếm nội bộ, còn reveal() giảm bộ đếm đó. Progress bar chỉ xuất hiện khi bộ đếm trở về 0.
Tuy nhiên, reveal() nhận tham số tùy chọn force để bỏ qua bộ đếm này. Inertia dùng chính cơ chế đó ở bên trong để ẩn progress khi prefetch nhưng vẫn đảm bảo progress xuất hiện khi điều hướng thực tế.
progress: false trong createInertiaApp(), các phương thức lập trình này sẽ không hoạt động.
Tùy chỉnh
Bạn cũng có thể tự thiết lập page loading indicator tùy chỉnh bằng events của Inertia. Hãy xem cách thực hiện với thư viện NProgress làm ví dụ. Trước tiên, hãy tắt loading indicator mặc định của Inertia.NProgress và router của Inertia vào ứng dụng.
start. Listener này sẽ hiển thị progress bar khi một Inertia visit mới bắt đầu.
finish để ẩn progress bar khi page visit kết thúc.
Xử lý visit bị hủy
Mặc dù phần triển khai progress tùy chỉnh này hoạt động tốt với các page visit hoàn tất bình thường, sẽ tốt hơn nếu xử lý cả visit bị hủy. Thứ nhất, với visit bị gián đoạn (bị hủy do một visit mới bắt đầu), progress bar chỉ nên được reset về vị trí bắt đầu. Thứ hai, với visit bị hủy thủ công, progress bar nên được loại bỏ khỏi trang ngay lập tức. Chúng ta có thể thực hiện bằng cách kiểm tra objectevent.detail.visit được cung cấp cho sự kiện finish.
Tiến trình tải file
Hãy tiến thêm một bước. Khi file đang được tải lên, sẽ rất hữu ích nếu loading indicator phản ánh đúng tiến trình upload. Bạn có thể làm việc này bằng sự kiệnprogress.
Trì hoãn loading indicator
Phần cuối cùng chúng ta sẽ triển khai là độ trễ trước khi hiển thị loading indicator. Thông thường nên trì hoãn việc hiển thị cho đến khi request kéo dài hơn 250–500 mili giây. Điều này tránh loading indicator xuất hiện liên tục ở các page visit rất nhanh, vốn có thể gây rối mắt. Để triển khai độ trễ, chúng ta sẽ dùng các hàmsetTimeout và clearTimeout. Trước tiên, hãy định nghĩa một biến để theo dõi timeout.
start để tạo timeout mới, hiển thị progress bar sau 250 mili giây.
finish để xóa mọi timeout còn tồn tại nếu page visit hoàn tất trước khi timeout kết thúc.
finish, chúng ta cần xác định progress bar đã thực sự bắt đầu hiển thị tiến trình hay chưa; nếu không, vô tình chúng ta sẽ khiến nó xuất hiện trước khi timeout kết thúc.
progress.
Ví dụ hoàn chỉnh
Để tiện tham khảo, dưới đây là toàn bộ source code của phiên bản cuối cùng cho loading indicator tùy chỉnh.Tùy chọn visit
Ngoài các cấu hình trên, Inertia.js cung cấp hai tùy chọn visit để kiểm soát loading indicator theo từng request:showProgress và async. Các tùy chọn này cho phép kiểm soát chi tiết hơn cách Inertia.js xử lý asynchronous request và quản lý progress indicator.
ShowProgress
Tùy chọnshowProgress cho phép kiểm soát chi tiết khả năng hiển thị loading indicator trong khi request đang chạy.
Async
Tùy chọnasync cho phép thực hiện asynchronous request mà không hiển thị progress indicator mặc định. Có thể dùng kết hợp với tùy chọn showProgress.