ちらつきの問題を引き起こす可能性のある2つの個別の問題が実際にあり、これらのいずれかまたは両方に直面している可能性があります。
問題1:ng-cloakの適用が遅すぎる
この問題は、このページの多くの回答で説明されているように解決されています。AngularJSがヘッドにロードされていることを確認することです。ngCloak docを参照してください:
最良の結果を得るには、angular.jsスクリプトをHTMLファイルのヘッドセクションにロードする必要があります。または、CSSルール(上記)をアプリケーションの外部スタイルシートに含める必要があります。
問題2:ng-cloakの削除が早すぎる
この問題は、ページに多数のCSSがあり、ルールが相互にカスケードしていて、最上位のレイヤーが適用される前にCSSのより深いレイヤーがフラッシュする場合に発生する可能性が高いです。
style="display:none"
要素への追加を含む回答のjQueryソリューションは、スタイルが十分に遅れて削除される限り、この問題を解決します(実際、これらのソリューションは両方の問題を解決します)。ただし、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はOPが直面している問題のようですが、代わりにまたは同様に問題2が発生しているため、ソリューションが機能しないか、部分的にしか機能しないことがわかっています。
重要な注意: ng-cloakを適用するのが遅すぎて、すぐに削除されるようにしてください。これらの問題の1つだけを解決しても、症状が緩和されない場合があります。