Es gibt tatsächlich zwei separate Probleme, die das Flimmerproblem verursachen können, und Sie könnten entweder mit einem oder beiden konfrontiert sein.
Problem 1: ng-cloak wird zu spät angelegt
Dieses Problem wurde behoben, da in vielen Antworten auf dieser Seite beschrieben wird, ob AngularJS in den Kopf geladen ist. Siehe ngCloak doc :
Um das beste Ergebnis zu erzielen, muss das Skript angle.js in den Kopfbereich der HTML-Datei geladen werden. Alternativ muss die CSS-Regel (oben) im externen Stylesheet der Anwendung enthalten sein.
Problem 2: ng-Umhang wird zu früh entfernt
Dieses Problem tritt am wahrscheinlichsten auf, wenn auf Ihrer Seite viel CSS mit übereinander kaskadierenden Regeln vorhanden ist und die tieferen CSS-Ebenen aufblitzen, bevor die oberste Ebene angewendet wird.
Die jQuery-Lösungen in Antworten, die das Hinzufügen style="display:none"
zu Ihrem Element beinhalten, lösen dieses Problem, solange der Stil spät genug entfernt wird (tatsächlich lösen diese Lösungen beide Probleme). Wenn Sie jedoch keine Stile direkt zu Ihrem HTML-Code hinzufügen möchten, können Sie mit die gleichen Ergebnisse erzielen ng-show
.
Beginnend mit dem Beispiel aus der Frage:
<ul ng-show="foo != null" ng-cloak>..</ul>
Fügen Sie Ihrem Element eine zusätzliche ng-show-Regel hinzu:
<ul ng-show="isPageFullyLoaded && (foo != null)" ng-cloak>..</ul>
(Sie müssen behalten ng-cloak
, um Problem 1 zu vermeiden).
Dann in Ihrem app.run Set isPageFullyLoaded
:
app.run(['$rootScope', function ($rootScope) {
$rootScope.$safeApply = function (fn) {
$rootScope.isPageFullyLoaded = true;
}
}]);
Beachten Sie, dass app.run je nach dem, was Sie gerade tun, möglicherweise der beste Ort zum Einstellen ist oder nicht isPageFullyLoaded
. Das Wichtigste ist, sicherzustellen, dass der Wert isPageFullyLoaded
auf true gesetzt wird, nachdem alles, was Sie nicht flackern möchten, dem Benutzer angezeigt werden kann.
Es hört sich so an, als ob Problem 1 das Problem ist, auf das das OP trifft, aber andere stellen fest, dass die Lösung nicht oder nur teilweise funktioniert, weil sie stattdessen oder auch Problem 2 treffen .
Wichtiger Hinweis: Achten Sie darauf, dass Sie Lösungen auf beide ng-Umhänge auftragen, die zu spät aufgetragen UND zu früh entfernt werden. Das Lösen nur eines dieser Probleme kann die Symptome möglicherweise nicht lindern.