Il y a en fait deux problèmes distincts qui peuvent causer le problème de scintillement et vous pourriez être confronté à l'un ou aux deux.
Problème 1: ng-cloak est appliqué trop tard
Ce problème est résolu comme décrit dans de nombreuses réponses sur cette page est de s'assurer que AngularJS est chargé dans la tête. Voir le document ngCloak :
Pour un résultat optimal, le script angular.js doit être chargé dans la section head du fichier html; alternativement, la règle css (ci-dessus) doit être incluse dans la feuille de style externe de l'application.
Problème 2: ng-cloak est supprimé trop tôt
Ce problème est plus susceptible de se produire lorsque vous avez beaucoup de CSS sur votre page avec des règles en cascade les unes sur les autres et que les couches profondes de CSS clignotent avant que la couche supérieure ne soit appliquée.
Les solutions jQuery dans les réponses impliquant l'ajout style="display:none"
à votre élément résolvent ce problème tant que le style est supprimé suffisamment tard (en fait, ces solutions résolvent les deux problèmes). Cependant, si vous préférez ne pas ajouter de styles directement à votre code HTML, vous pouvez obtenir les mêmes résultats en utilisant ng-show
.
En commençant par l'exemple de la question:
<ul ng-show="foo != null" ng-cloak>..</ul>
Ajoutez une règle ng-show supplémentaire à votre élément:
<ul ng-show="isPageFullyLoaded && (foo != null)" ng-cloak>..</ul>
(Vous devez continuer ng-cloak
à éviter le problème 1).
Ensuite, dans votre ensemble app.run isPageFullyLoaded
:
app.run(['$rootScope', function ($rootScope) {
$rootScope.$safeApply = function (fn) {
$rootScope.isPageFullyLoaded = true;
}
}]);
Sachez que selon exactement ce que vous faites, app.run peut ou non être le meilleur endroit à définir isPageFullyLoaded
. L'important est de s'assurer que la valeur isPageFullyLoaded
true après tout ce que vous ne voulez pas scintiller est prête à être révélée à l'utilisateur.
Il semble que le problème 1 soit le problème que l'OP rencontre, mais d'autres trouvent que la solution ne fonctionne pas ou ne fonctionne que partiellement parce qu'ils rencontrent le problème 2 à la place ou également.
Remarque importante: assurez-vous d'appliquer les solutions aux deux ng-cloak appliqués trop tard ET retirés trop tôt. La résolution d'un seul de ces problèmes peut ne pas soulager les symptômes.