2014-01-15 10 views
9

Ich habe ein Menü, das gleitet, wenn einige Tasten cliked sind, aber das Menü am Anfang versteckt ist, so etwas wie die:ngShow Ladeverzögerung Ausgabe

<div ng-show="menuShow"> 
    my menu here... 
</div> 

Das Problem wird, wenn die Seite des Menü nicht geladen ist versteckt (wahrscheinlich, weil die ngShow-Direktive nicht geladen wurde) und dann verschwinden sie (wahrscheinlich weil die ngShow-Direktive geladen wurde) und machen einen seltsamen "Blink-Effekt" mit dem Menü.

Was ist der beste Weg, um mit diesem Problem umzugehen?

+0

http://stackoverflow.com/questions/14068711/Alternative-to-ng-show-hide-or-how-to-load-only-relevent-section-of-dom –

Antwort

16

Am schnellsten und einfachsten wäre es, die Anweisung ngCloak dem Element hinzuzufügen.

<div ng-show="menuShow" ng-cloak> 
    my menu here... 
</div> 

Solange Angular synchron im Kopfteil des Dokuments geladen wird, soll dies das Flimmern verhindern.

Wenn Sie nicht Angular synchron geladen, dann according to the docs, Sie manuell die CSS der Seite hinzufügen könnte:

[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { 
    display: none !important; 
} 

Und wenn dies aus irgendeinem Grund nicht möglich ist, können Sie einfach alle der Angular-Inhalt, der sich nicht auf der Seite beim ersten Laden befindet, aber von einer ng-include, ng-view oder ui-view Direktive oder einer benutzerdefinierten Anweisung mit eigener Vorlage eingeschlossen wird. (Dies ist, wie ich es mache, aber mehr aus strukturellen Gründen)

+0

Hallo! Ich habe genau das gleiche Problem, aber beide Optionen in Ihrer Antwort funktionierte nicht für mich :(irgendwelche Ideen? Http://stackoverflow.com/questions/30540119/how-to-remove-delay-from-ngshow -initialisierung –

+0

Gute Antwort wegen der synchronen Unterscheidung, in meinem Fall ist angular nicht im Kopfbereich geladen, daher musste ich die CSS-Klasse manuell hinzufügen. –

1

Ich konnte nicht ng-cloak zu arbeiten, auch bei der Anwendung der CSS-Regeln, so endete ich mit ng-if. https://docs.angularjs.org/api/ng/directive/ngIf

Es ergibt sich ein bisschen mehr Aufwand als Angular tatsächlich das Objekt aus dem DOM entfernen und legen Sie es jedes Mal den Wert von ng-if Änderungen, aber in meinem Fall war dies nicht sehr häufig und der Aufwand war nicht erkennbar.