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().
nonce vào createInertiaApp() để cho phép style Inertia inject cho progress bar. Xem Content Security Policy để biết chi tiết.
Bạn có thể tắt loading indicator mặc định của Inertia bằng cách đặt property 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ự tạo page loading indicator tùy chỉnh bằng events của Inertia. Hãy xem cách làm 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
Custom progress này hoạt động tốt với page visit hoàn tất bình thường, nhưng cũng nên xử lý visit bị hủy. Với interrupted visit do visit mới hủy visit cũ, progress bar nên reset về vị trí bắt đầu. Với visit bị hủy thủ công, progress bar nên bị loại khỏi page ngay. 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 này, Inertia cung cấp hai visit option để kiểm soát loading indicator theo từng request:showProgress và async. Chúng cho phép kiểm soát tốt hơn cách Inertia xử lý asynchronous request và progress indicator.
Show Progress
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.