На самом деле есть две отдельные проблемы, которые могут вызвать проблему мерцания, и вы можете столкнуться с одной или обеими из них.
Проблема 1: нг-плащ применяется слишком поздно
Эта проблема решена, как описано во многих ответах на этой странице, чтобы убедиться, что AngularJS загружен в голову. Смотрите документ ngCloak :
Для достижения наилучшего результата скрипт angular.js должен быть загружен в раздел head файла 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 или также.
Важное примечание: Обязательно наносите растворы на оба нг-плаща, которые наносятся слишком поздно и удаляются в ближайшее время. Решение только одной из этих проблем может не облегчить симптомы.