Skip to main content
Đây là tài liệu Inertia.js v1, phiên bản không còn được duy trì tích cực. Vui lòng tham khảo tài liệu v3.
Vì request Inertia được thực hiện qua XHR nên trình duyệt thường không hiển thị chỉ báo tải khi điều hướng từ trang này sang trang khác. Để giải quyết, Inertia hiển thị progress indicator ở đầu trang mỗi khi bạn thực hiện một Inertia visit. Tất nhiên, nếu muốn, bạn có thể tắt loading indicator mặc định của Inertia và tự triển khai. Chúng ta sẽ trình bày cả hai cách bên dưới.

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 property progress của hàm createInertiaApp().
Bạn có thể tắt loading indicator mặc định của Inertia bằng cách đặt property progress thành false.

Tùy chỉnh

Bạn cũng có thể tự thiết lập chỉ báo tải trang 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.
Tiếp theo, cài thư viện NProgress.
Sau khi cài đặt, bạn cần thêm style của NProgress vào dự án. Bạn có thể dùng bản style được host trên CDN.
Tiếp theo, import cả NProgressrouter của Inertia vào ứng dụng.
Sau đó, hãy thêm listener cho sự kiện start. Chúng ta sẽ dùng listener này để hiển thị progress bar khi một Inertia visit mới bắt đầu.
Tiếp theo, thêm listener cho sự kiện finish để ẩn progress bar khi visit hoàn tất.
Vậy là xong. Giờ khi điều hướng giữa các trang, progress bar sẽ tự động được thêm vào và loại bỏ khỏi trang.

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 object event.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ện progress.
Giờ thay vì progress bar chỉ tăng dần mang tính ước lượng trong lúc file được tải lên, vị trí của nó sẽ thực sự cập nhật theo tiến trình request. Ở đây chúng ta giới hạn tiến trình ở 90% vì vẫn còn phải chờ response từ máy chủ.

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àm setTimeoutclearTimeout. Trước tiên, hãy định nghĩa một biến để theo dõi timeout.
Tiếp theo, cập nhật listener start để tạo timeout mới, hiển thị progress bar sau 250 mili giây.
Sau đó, cập nhật listener 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.
Trong listener 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.
Cuối cùng, chúng ta cũng cần thực hiện cùng phép kiểm tra đó trong listener progress.
Vậy là bạn đã có một loading indicator tùy chỉnh đẹp mắt cho trang.

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ài liệu chính thức

Bài dịch này được đối chiếu từ tài liệu Inertia.js v1 chính thức. Nếu có khác biệt do phiên bản hoặc cập nhật mới, hãy ưu tiên tài liệu chính thức làm nguồn tham chiếu.