Насправді є дві окремі проблеми, які можуть спричинити проблему мерехтіння, і ви можете зіткнутися з однією або обома з них.
Проблема 1: нг-плащ наноситься занадто пізно
Це питання вирішується так, як визначено в багатьох відповідях на цій сторінці, щоб переконатися, що AngularJS завантажений в голову. Див. Документ ngCloak :
Для найкращого результату сценарій angular.js повинен бути завантажений у головний розділ html-файлу; альтернативно, правило css (вище) повинно бути включене у зовнішній таблицю стилів програми.
Проблема 2: нг-плащ знімається занадто рано
Ця проблема, швидше за все, виникає, коли на вашій сторінці є багато CSS з правилами, що каскадно перетинаються один над одним, і глибші шари CSS спалахують до нанесення верхнього шару.
Рішення jQuery у відповідях, що включають додавання style="display:none"
до вашого елемента, вирішують цю проблему до тих пір, поки стиль буде видалено досить пізно (адже ці рішення вирішують обидві проблеми). Однак якщо ви не хочете додавати стилі безпосередньо у свій HTML, ви можете досягти тих же результатів, використовуючиng-show
.
Починаючи з прикладу з питання:
<ul ng-show="foo != null" ng-cloak>..</ul>
Додайте до свого елемента додаткове правило ng-show:
<ul ng-show="isPageFullyLoaded && (foo != null)" ng-cloak>..</ul>
(Вам потрібно тримати, ng-cloak
щоб уникнути проблеми 1).
Потім у своєму наборі app.run isPageFullyLoaded
:
app.run(['$rootScope', function ($rootScope) {
$rootScope.$safeApply = function (fn) {
$rootScope.isPageFullyLoaded = true;
}
}]);
Майте на увазі, що залежно від того, що саме ви робите, app.run може бути чи не найкращим місцем для встановлення isPageFullyLoaded
. Найважливіше - переконатися, що isPageFullyLoaded
встановлено значення true після того, як ви не хочете, щоб мерехтіння було готове розкрити користувачеві.
Здається, що Проблема 1 - це проблема, з якою стикається ОП, але інші виявляють, що рішення не працює або лише частково працює, тому що замість них також потрапляє проблема 2 .
Важлива примітка. Не забудьте застосувати розчини як до того, як ng-плащ наноситься занадто пізно, так і незабаром видаляється. Вирішення лише однієї з цих проблем може не полегшити симптоми.