2013-10-20 4 views
9

私は最初に表示すべきではないいくつかのコントローラを備えたangle-jsアプリケーションを持っています。彼らはng-cloakの使用にもかかわらず画面上で点滅します。この問題は、コンパイルが呼び出され、ng-cloakのディレクティブとクラスを削除するように思われます。これは、ng-showがfalseであるためではないにもかかわらずコントローラの内容が表示されるようにします。ng-cloakディレクティブがあまりにも早く削除されます

ng-cloakのコンパイルメソッドでjsの実行を一時停止すると、ng-cloakディレクティブが削除されたときに要素が表示されます。コントローラーでjsの実行を一時停止すると(たとえば、 "$ scope.visible = false;")、コントローラーがページに表示されたままになっているのがわかります。コントローラは、ロード中に後で表示されるはずですから、再び表示されません。

  • 私は私が「重要!」とNG-マントのCSSルールが含まれている私は、文書のHEAD
  • の私のCSSを持っている文書のHEAD
  • で私app.jsとangular.jsをロードしています私の外部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; 
    } 
]); 
+0

コードを入れ子にしましたか?だからあなたは 'ng-cloak'と' ng-show'ディレクティブを持つ別のDIVの中にDIVを持っていますか? :) – AndreM96

+0

ng-cloakが関係なく早期に削除されるため、なぜそれが役立つのかわかりません。しかし、あなたがそれを提案したので、私は試しました。無効。 – Salami

答えて

2

あなたの問題を再現しました。私のために働いたのは、内部がdivで、ng-showの代わりにng-ifディレクティブを使用することでした。私はそれが助けて欲しい

<div data-ng-controller="RoomsController"> 
    <div ng-cloak class="ng-cloak" data-ng-if="visible" > 
     Some text 
    </div>   
</div> 
+1

これは私が働くことができる唯一の回避策です。私のユースケースを扱うべきではありませんか?バグレポートを提出する必要があるかどうかを知りたい。 – Salami

1

ngCloak指令端compileプロセスまで、関連する要素を非表示にします。これは{{ someBinding }}のものを隠すのに便利です。 linkingプロセスにおける実際のリンクとバインディング

要素の点滅を防ぐには、アプリケーションが自身をブートストラップするまでそこに置くべきではありません。単純なウィジェットの場合はngInclude、大きく複雑なものの場合はngViewをご覧ください。

+0

私はngIncludeを試しましたが、これにより点滅がさらに悪化しました!画面上で点滅するとパネルがアニメーション表示されるようになりました。私は途中で1.2.0rc3を使用しています。 – Salami

0

JSがありますが、JSキックまでその中には、そこに座って、あなたのdiv

<div data-ng-controller="RoomsController"> 
    <div ng-cloak class="ng-cloak ng-hide" data-ng-if="visible" > 
     Some text 
    </div>   
</div> 
を隠すためにCSSを使用することができても、それを取るか、それを再度設定し、クラスでNG-皮を使用
13

IEモバイルでngCloakと同様の問題がありました。私が思いついた最も簡単な解決策は、他の回答の一部に似ていますが、私の代わりにNG-ショーを使用して、余分な$scope変数なし:

<div class="ng-hide" ng-show="true"> 
    {{mydata}} 
</div> 

ソリューションは、あなたがng-hideクラスを追加することを必要とし、 ng-show="true"。これにより、要素は、ng-showディレクティブがリンクされた後にのみ表示されます。完全ng-cloakを除去しながら

+1

私はこれが受け入れられた答えより良い解決策だと思います。簡単に修正し、既に存在するアニメーションの表示/非表示を解除しません。 –

+0

「ng-hide」クラスとは何ですか?それはちょうど場所の所有者ですか?またはcss selector ng-hideですか? –

2

はたくさんいじり後、私は、要素にng-hideクラスを追加することで、これを「修正」するために管理:

<div class="ng-hide" 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> 

これが最初の要素が非表示になります。 Angularは、ng-show指示文を処理するときにng-hideクラスを削除します。

関連する問題