Thực tế có hai vấn đề riêng biệt có thể gây ra vấn đề nhấp nháy và bạn có thể phải đối mặt với một hoặc cả hai vấn đề này.
Vấn đề 1: ng-cloak được áp dụng quá muộn
Vấn đề này được giải quyết như được giải thích trong nhiều câu trả lời trên trang này là để đảm bảo AngularJS được tải trong đầu. Xem tài liệu ngCloak :
Để có kết quả tốt nhất, tập lệnh angular.js phải được tải trong phần đầu của tệp html; cách khác, quy tắc css (ở trên) phải được bao gồm trong biểu định kiểu bên ngoài của ứng dụng.
Vấn đề 2: ng-cloak bị loại bỏ quá sớm
Vấn đề này rất có thể xảy ra khi bạn có nhiều CSS trên trang của mình với các quy tắc xếp chồng lên nhau và các lớp CSS sâu hơn xuất hiện trước khi lớp trên cùng được áp dụng.
Các giải pháp jQuery trong các câu trả lời liên quan đến việc thêm style="display:none"
vào phần tử của bạn sẽ giải quyết vấn đề này miễn là kiểu được loại bỏ đủ muộn (thực tế các giải pháp này giải quyết cả hai vấn đề). Tuy nhiên, nếu bạn không muốn thêm kiểu trực tiếp vào HTML, bạn có thể đạt được kết quả tương tự bằng cách sử dụng ng-show
.
Bắt đầu với ví dụ từ câu hỏi:
<ul ng-show="foo != null" ng-cloak>..</ul>
Thêm quy tắc ng-show bổ sung cho thành phần của bạn:
<ul ng-show="isPageFullyLoaded && (foo != null)" ng-cloak>..</ul>
(Bạn cần giữ lại ng-cloak
để tránh vấn đề 1).
Sau đó, trong bộ ứng dụng của bạn isPageFullyLoaded
.
app.run(['$rootScope', function ($rootScope) {
$rootScope.$safeApply = function (fn) {
$rootScope.isPageFullyLoaded = true;
}
}]);
Xin lưu ý rằng tùy thuộc vào chính xác những gì bạn đang làm, app.run có thể hoặc không phải là nơi tốt nhất để đặt isPageFullyLoaded
. Điều quan trọng là đảm bảo rằng nó isPageFullyLoaded
được đặt thành đúng sau bất cứ điều gì bạn không muốn nhấp nháy đã sẵn sàng để được tiết lộ cho người dùng.
Nghe có vẻ như Vấn đề 1 là vấn đề mà OP đang gặp phải, nhưng những người khác đang tìm thấy giải pháp đó không hoạt động hoặc chỉ hoạt động một phần vì họ cũng đang gặp phải Vấn đề 2 .
Lưu ý quan trọng: Đảm bảo áp dụng các giải pháp cho cả ng-cloak đang được áp dụng quá muộn VÀ loại bỏ sớm. Chỉ giải quyết một trong những vấn đề này có thể không làm giảm các triệu chứng.