最初に表示されるべきではないいくつかのコントローラーを備えた angular-js アプリがあります。ng-cloak を使用しているにもかかわらず、画面上で点滅します。問題は、コンパイルが呼び出されて ng-cloak ディレクティブとクラスが削除されることです。これにより、ng-show が false であるため、コントローラーのコンテンツが表示されてはならないにもかかわらず、表示されます。
ng-cloak の compile メソッドで js の実行を一時停止すると、ng-cloak ディレクティブが削除されたときに要素が表示されることがわかります。コントローラーでjsの実行を一時停止すると(たとえば、「$scope.visible = false;」で)、コントローラーがページに表示されたままになることがわかります。コントローラーは、ロードの後であるはずなので、再び非表示になります。
- ドキュメント HEAD に app.js と angular.js をロードしています
- ドキュメントHEADにCSSがあります
- 外部CSSとインラインに「!important」を使用してng-cloak cssルールを含めました
この点滅を防ぐにはどうすればよいですか?ng-cloak が ng-show に敬意を払わないのはなぜですか?
index.html:
<div ng-cloak class="ng-cloak" ng-controller="RoomsController" ng-show="visible">
<h1>This flashes, it can be seen if we set a breakpoint in the controller js, or after the ng-cloak directive's compile method in angular.js</h1>
</div>
app.js:
app.controller('RoomsController', ['$scope',
function ($scope) {
$scope.visible = false;
}
]);