In realtà ci sono due problemi separati che possono causare il problema dello sfarfallio e potresti trovarti ad affrontare uno o entrambi.
Problema 1: ng-cloak viene applicato troppo tardi
Questo problema è stato risolto come descritto in molte delle risposte in questa pagina per assicurarsi che AngularJS sia caricato nella testa. Vedi ngCloak doc :
Per il miglior risultato, lo script angular.js deve essere caricato nella sezione head del file html; in alternativa, la regola CSS (sopra) deve essere inclusa nel foglio di stile esterno dell'applicazione.
Problema 2: ng-cloak viene rimosso troppo presto
È molto probabile che questo problema si verifichi quando nella tua pagina sono presenti molti CSS con regole che si sovrappongono l'una all'altra e che i livelli più profondi di CSS lampeggiano prima dell'applicazione del livello superiore.
Le soluzioni jQuery nelle risposte che comportano l'aggiunta style="display:none"
al tuo elemento risolvono questo problema purché lo stile venga rimosso abbastanza tardi (in realtà queste soluzioni risolvono entrambi i problemi). Tuttavia, se preferisci non aggiungere stili direttamente al tuo HTML, puoi ottenere gli stessi risultati usando ng-show
.
A partire dall'esempio della domanda:
<ul ng-show="foo != null" ng-cloak>..</ul>
Aggiungi una regola ng-show aggiuntiva al tuo elemento:
<ul ng-show="isPageFullyLoaded && (foo != null)" ng-cloak>..</ul>
(È necessario continuare ng-cloak
per evitare il problema 1).
Quindi nel tuo set app.run isPageFullyLoaded
:
app.run(['$rootScope', function ($rootScope) {
$rootScope.$safeApply = function (fn) {
$rootScope.isPageFullyLoaded = true;
}
}]);
Tieni presente che, in base esattamente a ciò che stai facendo, app.run potrebbe essere o meno il posto migliore da impostare isPageFullyLoaded
. L'importante è assicurarsi che isPageFullyLoaded
venga impostato su true dopo che qualunque cosa tu non voglia sfarfallio è pronta per essere rivelata all'utente.
Sembra che il Problema 1 sia il problema che l'OP sta colpendo, ma altri stanno scoprendo che la soluzione non funziona o funziona solo in parte perché stanno colpendo il Problema 2 invece o anche.
Nota importante: assicurati di applicare entrambe le soluzioni a entrambi i mantelli ng applicati troppo tardi e rimossi a breve. Risolvere solo uno di questi problemi potrebbe non alleviare i sintomi.