Wie analysiert das überhaupt die Ausdrücke? Dies ist eine weitere Stelle, an der ng-init falsch verwendet wird; Die Direktive ng-init ist trotz ihres Namens kein Allzweck-Initialisierer.
– Claies
31. März 2015 um 11:15 Uhr
Wie @AR7 sagte, müssen Sie etwas CSS einfügen, damit es funktioniert. Ich empfehle nicht, angle.js in den Head-Bereich zu stellen.
und verwenden Sie entweder den Klassennamen oder das Attribut in Ihrem übergeordneten div oder an einer anderen Stelle, an der Sie Ihre App definiert haben.
z.B:
<div ng-app="Random" class="ng-cloak">
</div>
Ich wünschte, alle Antworten auf SO wären so 🙂
– devdropper87
28. Oktober 2015 um 23:26 Uhr
Funktioniert perfekt, aber könnten Sie diese CSS bitte näher erläutern? was genau macht es?
– Cemre Mengu
21. November 2015 um 13:47 Uhr
@Cemre Es fügt die hinzu display: none Eigenschaft für alle Variationen der ng-cloak-Klasse und -Direktive. Diese Klasse ist während der Ladezeit Ihrer App aktiv, daher stellt dieses CSS sicher, dass die Elemente mit dieser Klasse nicht angezeigt werden.
– Hartger
26. November 2015 um 9:37 Uhr
(aus dem Doc-Link von @GregL), ein wenig mehr über das WARUM: Das Problem mit dem OP-Code besteht darin, dass der Code die angle.min.js am Ende des Seitenladevorgangs lädt, sodass das HTML (Angular-Template) vorher gerendert wird ng-cloak wird definiert. Das Hinzufügen der CSS-Regelreferenz hier funktioniert einfach durch Definieren des eigenen ng-cloak-Stils von angle im , sodass er (bevor Angular.min.js geladen wird) sofort vorhanden ist, wenn die Seite geladen wird, selbst wenn Sie angle erst laden Ende des HTML. Doc empfiehlt das Laden von angle.js in , um dieses Problem zu vermeiden/minimieren.
Für das beste Ergebnis ist die angular.js Skript muss im Head-Bereich des HTML-Dokuments geladen werden; Alternativ muss die obige CSS-Regel in das externe Stylesheet der Anwendung eingefügt werden.
Die Verwendung von ngBind sollte das ebenfalls beseitigen (ich entwickle manchmal in SharePoint und ngCloak funktioniert nicht).
AngularJS-Dokumentation:
Es ist vorzuziehen, ngBind anstelle von {{ expression }} zu verwenden, wenn ein Template vorübergehend vom Browser im Rohzustand angezeigt wird, bevor Angular es kompiliert. Da ngBind ein Elementattribut ist, macht es die Bindungen für den Benutzer unsichtbar, während die Seite geladen wird.
Eine alternative Lösung für dieses Problem wäre die Verwendung der ngCloak-Direktive.
Das OP hat dem keinen Namen gesetzt ng-app Richtlinie und mit Winkel 1.3+. Hoffe, das ist es, was verhindert, dass es funktioniert
– Mohammedias
30. März 2015 um 6:04 Uhr
@mohamedrias mag möglich sein, aber er verwendet keinen ng-controller oder etwas, das mit Modulen zu tun hat, also denke ich, dass es in diesem speziellen Fall kein Problem verursachen wird 🙂
– Squiroid
30. März 2015 um 6:12 Uhr
Rollintocour
In meinem Fall dachte ich, dass meine Probleme auf ausstehende Ajax-Anfragen zurückzuführen waren. Ng-cloak funktioniert wahrscheinlich für statische Inhalte, aber wenn eine Vorlage von Ajax-Daten abhängt, werden diese daher gerendert, bevor die Ajax-Antwort empfangen wird.
Um dies zu vermeiden, definiere ich eine Direktive:
angu
mymodule
.directive("ajaxCloak", ['$interval', '$http', function ($interval, $http) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
let stop = $interval(() => {
if ($http.pendingRequests.length === 0) {
$interval.cancel(stop);
attrs.$set("ajaxCloak", undefined);
element.removeClass("ajax-cloak");
}
}, 100);
}
};
}]);
Hinweis: Dies ist nicht so ausgefeilt wie ng-cloak, da dies ein globaler Cloack ist, er verbirgt alles, bis alle Anfragen abgeschlossen sind.
Das OP hat dem keinen Namen gesetzt ng-app Richtlinie und mit Winkel 1.3+. Hoffe, das ist es, was verhindert, dass es funktioniert
– Mohammedias
30. März 2015 um 6:04 Uhr
@mohamedrias mag möglich sein, aber er verwendet keinen ng-controller oder etwas, das mit Modulen zu tun hat, also denke ich, dass es in diesem speziellen Fall kein Problem verursachen wird 🙂
– Squiroid
30. März 2015 um 6:12 Uhr
Jens Alenius
Meine Lösung Ich glaube, ich habe alle oben genannten Vorschläge ausprobiert, aber nichts hat funktioniert. Einige verwenden ng-include, aber es scheint ein bisschen zu viel zu sein, außerdem könnte es mit dem inneren Bereich, der erstellt wird, beängstigend sein. Also versuchte man es mit style und ng-style. In meiner betroffenen Haupt-Div.
Dann setze ich die in meinem Basiscontroller geladene Bereichsvariable.
$scope.loaded ={display:'block'};
Ich habe immer noch all diese {{ }}. Seltsam, wenn die Anzeige nur blockiert wird, wenn anglejs geladen wurde. Dann bemerkte ich, dass ich die Firefox f12-Entwicklerkonsole am Laufen hatte. Es macht Sachen. Ich Idiot
14042700cookie-checkWie verwende ich die ng-cloak-Direktive richtig?yes
Sie haben ng-app keinen Namen gegeben
– Mohammedias
30. März 2015 um 5:59 Uhr
Wie analysiert das überhaupt die Ausdrücke? Dies ist eine weitere Stelle, an der ng-init falsch verwendet wird; Die Direktive ng-init ist trotz ihres Namens kein Allzweck-Initialisierer.
– Claies
31. März 2015 um 11:15 Uhr
Wie @AR7 sagte, müssen Sie etwas CSS einfügen, damit es funktioniert. Ich empfehle nicht, angle.js in den Head-Bereich zu stellen.
– Joao Polo
31. März 2015 um 15:39 Uhr